Datei mit Hex-Werten lesen und verarbeiten

Datei mit Hex-Werten lesen und verarbeiten

Spur der Speicherverweise, die von einem Programm gemacht wurden ich möchte die Werte in der dritten Spalte lesen und die Differenz zu den anderen Werten in derselben Spalte ermitteln. Ich habe Folgendes versucht

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

Da die Werte aber hexadezimal sind, erhalte ich als Differenz eine Null.

Antwort1

Der Trick besteht darin, dass awk bei der Eingabe Hex-Zahlen nicht automatisch interpretiert. Sie müssen es mithilfe der strtonumFunktion explizit dazu auffordern. Wenn Sie also die Zahl in Ihrem Code benötigen, ersetzen Sie sie $3durch strtonum($3).

Beispiel

Nehmen wir dies als Testdatei:

$ cat file
0x7f7488c4e6d7: R 0x7f7488b169ce
0x7f7488c4e6e9: R 0x7f7488b169cc
0x7f7488c4e6f8: R 0x7f7488b169d0

Lassen Sie uns dies als Skript verwenden:

$ 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"
}

Die Bildschirmausgabe sieht folgendermaßen aus:

$ ./a.awk file
2
fffffffffffffffe

Die Ausgabedatei ist:

$ cat diff
0x7f7488b169cc 2
0x7f7488b169d0 -2

verwandte Informationen