прочитать файл, содержащий шестнадцатеричные значения, и обработать его

прочитать файл, содержащий шестнадцатеричные значения, и обработать его

след ссылок памяти, сделанных программой Я хочу прочитать значения в третьем столбце и найти разницу с другим значением в том же столбце. Я попробовал это

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

Но поскольку значения шестнадцатеричные, я получаю ноль в качестве разницы.

решение1

Хитрость в том, что при вводе awk не интерпретирует шестнадцатеричные числа автоматически. Вам нужно попросить его сделать это явно с помощью функции strtonum. Таким образом, когда вам нужно число в вашем коде, замените $3на strtonum($3).

Пример

Давайте возьмем это в качестве тестового файла:

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

Давайте используем это в качестве сценария:

$ 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.awk file
2
fffffffffffffffe

Выходной файл:

$ cat diff
0x7f7488b169cc 2
0x7f7488b169d0 -2

Связанный контент