
UTF8でエンコードされたファイルの文字列を比較しようとしています
file /dev/eeprom: UTF-8 Unicode text, with very long lines
スクリプトにハードコードされたシリアル番号を使用します。コンソールに出力すると、文字列は正常に表示されますが、ファイルの形式に問題があるようです (iconv は使用できません)。ファイル出力が正しければ、スクリプトは ASCII テキスト実行可能ファイルです。
#!/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
出力:
.script.sh
EEPROM_ID: C000139-102
WRONG
これらの文字列を適切に比較する方法はありますか?
答え1
これを完全に実行できるはずですawk
:
awk -F':' -v ref_id="C000139-102" '$1=="ID" {if ($2==ref_id) print "Identical"; else print "WRONG"}' /dev/eeprom
サンプル スクリプトのように、ID をシェル変数に読み出すには、次のようにします。
eeprom_id=$(awk -F':' '$1=="ID" {print $2}')
@user414777が疑っているように、UTF-16でエンコードされたファイルを扱っている場合は、
cat /dev/eeprom | tr -d '\0' | awk -F':' -v ref_id="C000139-102" '$1=="ID" {if ($2==ref_id) print "Identical"; else print "WRONG"}'
または試す
awk -F':' -v ref_id="C000139-102" '{gsub(/\x00/,""); if ($1=="ID") {if ($2==ref_id) print "Identical"; else print "WRONG"}}' /dev/eeprom
再度、ID をシェル変数に読み込むには、次のようにします。
eeprom_id=$(cat /dev/eeprom | tr -d '\0' | awk -F':' '$1=="ID" {print $2}')
または
eeprom_id=$(awk -F':' '{gsub(/\x00/,""); if ($1=="ID") print $2}' /dev/eeprom)