Tente algo em torno
awk '{ printf("%c \n" ,strtonum("0x" substr($2,2)))}' TEST.txt
é claro, modifique a expressão printf de acordo com suas necessidades, adicionando o if
the $2
...
Eu tenho um arquivo de entrada com esta linha (dados do usuário / colunas retiradas) e vários outros milhares. O xCE é um valor hexadecimal não convertido do arquivo de clientes.
412640 xCE
Quando eu o executo através deste comando awk:
awk -F'\t' '{if ($1 == "412640" ) print $1 "\t" $2}' TEST.txt > test1.txt
a saída em test1.txt converteu xCE para Î, que é o que eu quero que aconteça.
Quando eu 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 tem xCE, e quando eu tentei:
awk -F'\t' '{if ($1 == $1 )print $1 "\t" $2}' TEST.txt > test2.txt
a saída no test2 ainda tem xCE.
Algum conselho sobre como obter sempre a saída convertida?
Estou usando :: GNU Awk 3.1.7 Minha página de códigos é UTF-8 No redhat 6.7
EDITAR: Depois de vários testes unitários de ambos os comandos awk 'bons' / 'ruins', nem sempre posso replicar a saída 'ruim'. Quanto maior o total de linhas, menor a probabilidade de converter os valores hexadecimais, mas não é 100% do tempo. Eu estou olhando para tentar controlar o tamanho do buffer para awk agora, no pressuposto de que tem a ver com a escrita direto do buffer para a saída vs gravação para arquivos temporários internos quando precisa do buffer para outras coisas.
Tente algo em torno
awk '{ printf("%c \n" ,strtonum("0x" substr($2,2)))}' TEST.txt
é claro, modifique a expressão printf de acordo com suas necessidades, adicionando o if
the $2
...