讀取包含十六進制值的檔案並對其進行處理

讀取包含十六進制值的檔案並對其進行處理

程式進行的記憶體引用的跟踪 我想讀取第三列中的值並找出與同一列中其他值的差異。我試過這個

#!/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

相關內容