leer el archivo que contiene valores hexadecimales y procesarlo

leer el archivo que contiene valores hexadecimales y procesarlo

rastro de referencias de memoria realizadas por un programa Quiero leer los valores de la tercera columna y encontrar la diferencia con el otro valor de la misma columna. Probé esto

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

Pero como los valores son hexadecimales, obtengo un cero como diferencia.

Respuesta1

El truco es que, al ingresar, awk no interpreta automáticamente los números hexadecimales. Tienes que pedirle que lo haga explícitamente usando la strtonumfunción. Por lo tanto, cuando necesite el número en su código, reemplácelo $3con strtonum($3).

Ejemplo

Tomemos esto como archivo de prueba:

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

Usemos esto como script:

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

La salida de la pantalla se ve así:

$ ./a.awk file
2
fffffffffffffffe

El archivo de salida es:

$ cat diff
0x7f7488b169cc 2
0x7f7488b169d0 -2

información relacionada