leia o arquivo contendo valores hexadecimais e processe-o

leia o arquivo contendo valores hexadecimais e processe-o

rastreamento de referências de memória feitas por um programa quero ler os valores da terceira coluna e encontrar a diferença do outro valor na mesma coluna. eu tentei isso

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

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

Responder1

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

Exemplo

Vamos considerar isso como arquivo de teste:

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

Vamos usar isso como 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 é semelhante a:

$ ./a.awk file
2
fffffffffffffffe

O arquivo de saída é:

$ cat diff
0x7f7488b169cc 2
0x7f7488b169d0 -2

informação relacionada