
Estoy intentando comparar una cadena de un archivo codificado en UTF8.
file /dev/eeprom: UTF-8 Unicode text, with very long lines
con un número de serie codificado en el script. Al imprimir en la consola, la cadena aparece bien, pero parece que hay un problema con el formato del archivo (aunque iconv no está disponible). El script es un texto ASCII ejecutable si la salida del archivo es correcta.
#!/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
Producción:
.script.sh
EEPROM_ID: C000139-102
WRONG
¿Alguna idea de cómo comparar esas cadenas correctamente?
Respuesta1
Debería ser posible hacer esto completamente en awk
:
awk -F':' -v ref_id="C000139-102" '$1=="ID" {if ($2==ref_id) print "Identical"; else print "WRONG"}' /dev/eeprom
Para leer el ID en una variable de shell, como en el script de ejemplo:
eeprom_id=$(awk -F':' '$1=="ID" {print $2}')
Si, como sospecha @user414777, se trata de un archivo codificado en UTF-16, es posible que deba utilizar
cat /dev/eeprom | tr -d '\0' | awk -F':' -v ref_id="C000139-102" '$1=="ID" {if ($2==ref_id) print "Identical"; else print "WRONG"}'
o tratar
awk -F':' -v ref_id="C000139-102" '{gsub(/\x00/,""); if ($1=="ID") {if ($2==ref_id) print "Identical"; else print "WRONG"}}' /dev/eeprom
Nuevamente, para leer el ID en una variable de shell:
eeprom_id=$(cat /dev/eeprom | tr -d '\0' | awk -F':' '$1=="ID" {print $2}')
o
eeprom_id=$(awk -F':' '{gsub(/\x00/,""); if ($1=="ID") print $2}' /dev/eeprom)