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 if
el $2
...