答え1
問題は、入力時に awk が 16 進数を自動的に解釈しないことです。 関数を使用して明示的に解釈するように要求する必要があります。 したがって、コードで数値が必要な場合は、を に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