решение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