读取包含十六进制值的文件并对其进行处理

读取包含十六进制值的文件并对其进行处理

程序进行的内存引用的跟踪 我想读取第三列中的值并找出与同一列中其他值的差异。我试过这个

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

但由于这些值是十六进制,我得到的差值为零。

答案1

诀窍在于,在输入时,awk 不会自动解释十六进制数字。您必须要求它使用该strtonum函数显式地执行此操作。因此,当您需要代码中的数字时,请将其替换$3strtonum($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

相关内容