我有一个看起来像这样的udcli输出(假设命令完全有意义,实际上是由随机字节生成器实现的)
00000000000005b9 dc4753 fadd qword [edi+0x53]
00000000000005bc 226d9e and ch, [ebp-0x62]
00000000000005bf 81a4a495dc47ff4b and dword [esp-0xb8236b], 0xe0076b4b
-6b07e0
00000000000005ca e667 out 0x67, al
00000000000005cc 9acc27d432520f call dword 0xf52:0x32d427cc
注意第3到第4行,其中有一条额外的行从第3行延伸。
现在,我要做的是获得前一行下一行地址的差异。我是通过使用我自己的awk脚本来完成的。
我的问题是,当awk读取第3行和第4行时,它会给我一个像这样的输出
3 dc4753 fadd qword [edi+0x53]
3 226d9e and ch, [ebp-0x62]
3 81a4a495dc47ff4b and dword [esp-0xb8236b],
-1471
1482 e667 out 0x67, al
2 9acc27d432520f call dword 0xf52:0x32d427cc
其中第1列是指令的大小(2个地址的差异)
现在我的问题是,如何让awk忽略该特定行,以便正确输出。 这是否可以用grep代替?
我当前的awk脚本
udcli file.out | awk 'BEGIN{getline; print "0\t" $2 "\t" $3 "\t" $4 "\t" $5; a = 0; b = strtonum("0x"$1);} {a = strtonum("0x"$1); print a - b "\t" $2 "\t" $3 "\t" $4 "\t" $5; b = a;}'
答案 0 :(得分:1)
很难说肯定没有看到你的实际awk脚本,但这样的事情应该会帮助你...
awk '$1~/^000/' ...
答案 1 :(得分:0)
awk '/^\s/ { getline }
... rest of script' < inputfile