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