Dileesh Dil Asked: 2017-11-26 21:42:57 +0800 CST2017-11-26 21:42:57 +0800 CST 2017-11-26 21:42:57 +0800 CST 读取包含十六进制值的文件并处理它 772 我想读取第三列中的值并找到与同一列中其他值的差异。我试过这个 #!/usr/bin/awk -f NR==1 {prev=$3;next; } dif=prev - $3; {printf "%x",dif} {print $3, dif > "diff"} 但是由于这些值是十六进制的,所以差值为零。 linux text-processing 1 个回答 Voted Best Answer John1024 2017-11-26T22:23:18+08:002017-11-26T22:23:18+08:00 诀窍是,在输入时,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
诀窍是,在输入时,awk 不会自动解释十六进制数字。您必须使用该
strtonum
函数明确要求它执行此操作。因此,当您需要代码中的数字时,请替换$3
为strtonum($3)
.例子
让我们把它作为测试文件:
让我们使用它作为脚本:
屏幕输出如下所示:
输出文件是: