Comparar cadenas con diferentes codificaciones

Comparar cadenas con diferentes codificaciones

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)

información relacionada