diferencias de caracteres awk al usar if

diferencias de caracteres awk al usar if

Tengo un archivo de entrada con esta línea (datos de usuario/columnas eliminadas) y varios miles más. El xCE es un valor hexadecimal no convertido del archivo del cliente.

412640  xCE

Cuando lo ejecuto a través de este comando awk:

awk -F'\t' '{if ($1 == "412640" ) print $1 "\t" $2}' TEST.txt > test1.txt

la salida en test1.txt ha convertido xCE a Î, que es lo que quiero que suceda.

Cuando ejecuto el archivo completo sin el if, este comando:

awk -F'\t' '{print $1 "\t" $2}' TEST.txt > test2.txt

la salida en test2.txt todavía tiene xCE, y cuando lo intenté:

awk -F'\t' '{if ($1 == $1 )print $1 "\t" $2}' TEST.txt > test2.txt

la salida en test2 todavía tiene xCE.

¿Algún consejo sobre cómo obtener siempre la salida convertida?

Estoy usando:: GNU Awk 3.1.7 Mi página de códigos es UTF-8 En redhat 6.7

EDITAR: Después de muchas pruebas unitarias más de los comandos awk 'buenos' y 'malos', no siempre puedo replicar la salida 'mala'. Cuanto mayor sea el número total de filas, es menos probable que se conviertan los valores hexadecimales, pero no es el 100% de las veces. Estoy pensando en intentar controlar el tamaño del búfer para awk ahora, asumiendo que tiene que ver con escribir directamente desde el búfer a la salida versus escribir en archivos temporales internos cuando necesita el búfer para otras cosas.

Respuesta1

Prueba algo alrededor

 awk '{ printf("%c \n" ,strtonum("0x" substr($2,2)))}' TEST.txt 

por supuesto, modifique la expresión printf según sus necesidades, agregando ifel $2...

información relacionada