imprime um arquivo em hexadecimal usando awk

2

Eu tenho um nome de arquivo x

$ cat x
1A34532112345

Eu quero imprimir em hexadecimal usando awk Escrevi um script (com ajuda da web)

fold -1 /home/cscape/Desktop/x | gawk '{ printf("%s , %X\n",$0, int($0) )}' 

Mas a saída de cada caractere é 0

$ fold -1 /home/cscape/Desktop/x | gawk '{ printf("%s , %X\n",$0, int($0) )}'
1 , 1
A , 0
3 , 3
4 , 4
5 , 5
3 , 3
2 , 2
1 , 1
1 , 1
2 , 2
3 , 3
4 , 4
5 , 5

Por que 0 para A . mesmo com %d . Eu quero imprimir o valor ASCII de A como HEX .

    
por Grijesh Chauhan 15.12.2012 / 09:44

2 respostas

2

o awk converterá silenciosamente strings em números. Qual número? O número que você obtém digitando os dígitos decimais iniciais da string (pode ser apenas "" , se a string estiver vazia ou não começar com nenhum dígito decimal, como é o caso de "A" ) e convertendo-os para um número. "" é convertido em 0 . Então, todos esses seriam convertidos em 0 :

  • "0"
  • "0text"
  • "texto"
  • ""

o awk apenas converte strings em números dessa forma quando um número é necessário. Em "0text" + 1 , um número é necessário, então o resultado será 1 . Em apenas "0text" , um número não é necessário, portanto, nenhuma conversão ocorre. Em printf("%d", "0text") , um número é novamente necessário, então a string será convertida em um número.

O que você está procurando é uma função ord , que não é uma função nativa no awk. A documentação do gawk descreve como escrever tal função no awk.

    
por 15.12.2012 / 10:38
3

Se você não tiver para usar o awk, você pode procurar od ("octal despejo "):

$ echo 1A34532112345 | od -t x1
0000000 31 41 33 34 35 33 32 31 31 32 33 34 35 0a
0000016
    
por 15.12.2012 / 19:01