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

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

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

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

하지만 값이 16진수이므로 차이가 없습니다.

답변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

관련 정보