ler arquivo contendo valores Hex e processá-lo

1

Euquerolerosvaloresnaterceiracolunaeencontraradiferençadooutrovalornamesmacoluna.Eutenteiisso

#!/usr/bin/awk-fNR==1{prev=$3;next;}dif=prev-$3;{printf"%x",dif}
{print $3, dif > "diff"}

Mas como os valores são hexadecimais, estou obtendo um zero como a diferença.

    
por Dileesh Dil 26.11.2017 / 06:42

1 resposta

0

O truque é que, na entrada, o awk não interpreta automaticamente números hexadecimais. Você tem que pedir para fazer isso explicitamente usando a função strtonum . Assim, quando você precisar do número em seu código, substitua $3 por strtonum($3) .

Exemplo

Vamos considerar isso como o arquivo de teste:

$ cat file
0x7f7488c4e6d7: R 0x7f7488b169ce
0x7f7488c4e6e9: R 0x7f7488b169cc
0x7f7488c4e6f8: R 0x7f7488b169d0

Vamos usar isso como o script:

$ cat a.awk
#!/usr/bin/awk -f
NR==1 {
    prev=strtonum($3)
    next
}
{
    dif=prev - strtonum($3)
    printf "%x\n",dif
    print $3, dif > "diff"
}

A saída da tela se parece com:

$ ./a.awk file
2
fffffffffffffffe

O arquivo de saída é:

$ cat diff
0x7f7488b169cc 2
0x7f7488b169d0 -2
    
por 26.11.2017 / 07:23