awk diferenças de caracteres ao usar if

awk diferenças de caracteres ao usar if

Eu tenho um arquivo de entrada com esta linha (dados/colunas do usuário removidos) e vários milhares de outros. O xCE é um valor hexadecimal não convertido do arquivo do cliente.

412640  xCE

Quando eu executo este comando awk:

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

a saída em test1.txt converteu xCE em Î, que é o que eu quero que aconteça.

Quando executo o arquivo inteiro sem o if, então este comando:

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

a saída em test2.txt ainda contém xCE e quando tentei:

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

a saída em test2 ainda contém xCE.

Algum conselho sobre como sempre obter a saída convertida?

Estou usando :: GNU Awk 3.1.7 Minha página de código é UTF-8 no redhat 6.7

EDIT: Depois de mais alguns testes de unidade dos comandos awk 'bons'/'ruins', nem sempre consigo replicar a saída 'ruim'. Quanto maior o número total de linhas, menor a probabilidade de converter os valores hexadecimais, mas não é 100% das vezes. Estou tentando controlar o tamanho do buffer para o awk agora, supondo que isso tenha a ver com a gravação direta do buffer para a saída versus a gravação em arquivos temporários internos quando precisar do buffer para outras coisas.

Responder1

Experimente algo por aí

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

é claro que modifique a expressão printf de acordo com suas necessidades, adicionando ifo $2...

informação relacionada