
Ich versuche, eine Zeichenfolge aus einer Datei zu vergleichen, die in UTF8 codiert ist
file /dev/eeprom: UTF-8 Unicode text, with very long lines
mit einer Seriennummer, die im Skript fest codiert ist. Beim Drucken auf der Konsole wird die Zeichenfolge einwandfrei angezeigt, aber es scheint ein Problem mit dem Format der Datei zu geben (iconv ist jedoch nicht verfügbar). Das Skript ist eine ausführbare ASCII-Textdatei, wenn die Dateiausgabe korrekt ist.
#!/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
Ausgabe:
.script.sh
EEPROM_ID: C000139-102
WRONG
Irgendwelche Ideen, wie man diese Zeichenfolgen richtig vergleicht?
Antwort1
Dies sollte vollständig in folgendem Format möglich sein awk
:
awk -F':' -v ref_id="C000139-102" '$1=="ID" {if ($2==ref_id) print "Identical"; else print "WRONG"}' /dev/eeprom
Um die ID in eine Shell-Variable auszulesen, wie in Ihrem Beispielskript:
eeprom_id=$(awk -F':' '$1=="ID" {print $2}')
Wenn Sie, wie @user414777 vermutet, mit einer UTF-16-kodierten Datei arbeiten, müssen Sie möglicherweise
cat /dev/eeprom | tr -d '\0' | awk -F':' -v ref_id="C000139-102" '$1=="ID" {if ($2==ref_id) print "Identical"; else print "WRONG"}'
oder Versuche
awk -F':' -v ref_id="C000139-102" '{gsub(/\x00/,""); if ($1=="ID") {if ($2==ref_id) print "Identical"; else print "WRONG"}}' /dev/eeprom
Um die ID erneut in eine Shell-Variable einzulesen:
eeprom_id=$(cat /dev/eeprom | tr -d '\0' | awk -F':' '$1=="ID" {print $2}')
oder
eeprom_id=$(awk -F':' '{gsub(/\x00/,""); if ($1=="ID") print $2}' /dev/eeprom)