Bandingkan string dengan pengkodean yang berbeda
Saya mencoba membandingkan string dari file yang dikodekan dalam UTF8
file /dev/eeprom: UTF-8 Unicode text, with very long lines
dengan nomor seri yang di-hardcode ke dalam skrip. Saat mencetak ke konsol, string tersebut muncul dengan baik tetapi tampaknya ada masalah dengan format file (iconv tidak tersedia). Skrip adalah teks ASCII yang dapat dieksekusi jika keluaran file benar.
#!/bin/sh
eeprom_id=$(cat /dev/eeprom | grep -e ID: | awk '{split($0,a,":"); print a[2]}')
echo "EEPROM_ID: $eeprom_id" if [ $eeprom_id == "C000139-102" ]
then
echo "String identical"
else
echo "WRONG"
fi
Keluaran:
.script.sh
EEPROM_ID: C000139-102
WRONG
Ada ide bagaimana membandingkan string tersebut dengan benar?
Jawaban
Ini harus memungkinkan untuk melakukan ini sepenuhnya di awk:
awk -F':' -v ref_id="C000139-102" '$1=="ID" {if ($2==ref_id) print "Identical"; else print "WRONG"}' /dev/eeprom
Untuk membaca ID menjadi variabel shell, seperti pada contoh skrip Anda:
eeprom_id=$(awk -F':' '$1=="ID" {print $2}')
Jika, seperti yang dicurigai @ user414777, Anda berurusan dengan file berenkode UTF-16, Anda mungkin harus menggunakan
cat /dev/eeprom | tr -d '\0' | awk -F':' -v ref_id="C000139-102" '$1=="ID" {if ($2==ref_id) print "Identical"; else print "WRONG"}'
atau coba
awk -F':' -v ref_id="C000139-102" '{gsub(/\x00/,""); if ($1=="ID") {if ($2==ref_id) print "Identical"; else print "WRONG"}}' /dev/eeprom
Sekali lagi, untuk membaca ID menjadi variabel shell:
eeprom_id=$(cat /dev/eeprom | tr -d '\0' | awk -F':' '$1=="ID" {print $2}')
atau
eeprom_id=$(awk -F':' '{gsub(/\x00/,""); if ($1=="ID") print $2}' /dev/eeprom)