diferenças de caracteres awk ao usar se

1

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.

    
por mike ray 13.10.2015 / 19:29

1 resposta

1

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 ...

    
por 13.10.2015 / 19:55