Hex 값이 포함된 파일을 읽고 처리합니다.

Hex 값이 포함된 파일을 읽고 처리합니다.

프로그램에 의한 메모리 참조 추적 세 번째 열의 값을 읽고 같은 열의 다른 값과의 차이점을 찾고 싶습니다. 나는 이것을 시도했다

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

하지만 값이 16진수이므로 차이로 0이 표시됩니다.

답변1

비결은 입력 시 awk가 16진수를 자동으로 해석하지 않는다는 것입니다. 함수 를 사용하여 명시적으로 그렇게 하도록 요청해야 합니다 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

관련 정보