我正在处理一些tshark字段的输出。一些处理已经发生,并且现在有相邻行的最后一个字段被复制。这些重复项缺少一个具有匹配序列号的行。任务是仅保留序列列匹配的相邻行对。最后一个字段的值为0和130,每对行以130开头。序列号是0-15。数据流包含很多行。 的字段为:awk根据重复字段保留相邻行
date time src-int dst-int seq function
24/01/2017 16:57:27.307400000 10 1000 11 130
24/01/2017 16:57:27.418675000 1000 10 11 0
24/01/2017 16:58:53.603604000 1000 10 12 0
24/01/2017 16:58:54.121603000 10 1000 13 130
24/01/2017 16:58:54.677752000 10 1000 14 130
24/01/2017 16:58:54.681079000 1000 10 14 0
24/01/2017 17:09:12.974979000 10 1000 1 130
24/01/2017 17:09:12.981149000 1000 10 1 0
24/01/2017 17:09:13.477211000 1000 10 2 0
24/01/2017 17:09:14.026279000 1000 10 3 0
所需的输出是保持对行的与功能130顺序然后0和匹配序列号:
24/01/2017 16:57:27.307400000 10 1000 11 130
24/01/2017 16:57:27.418675000 1000 10 11 0
24/01/2017 16:58:54.677752000 10 1000 14 130
24/01/2017 16:58:54.681079000 1000 10 14 0
24/01/2017 17:09:12.974979000 10 1000 1 130
24/01/2017 17:09:12.981149000 1000 10 1 0
我有一个解决方案,半作品。它匹配\t130$
并获取下一行,如果序列匹配则打印。它返回的是良好的数据,但是它不处理重复的值130.在示例数据中,它省略了序列14.相邻重复行的数量是任意的,因此嵌套另一个测试似乎很愚蠢。
awk "/\t130$/ {seq=$5; prev=$0; getline;} $5==seq {print prev; print;}"
如何最好地处理所有重复的开始条件?
顺便说一句,在Windows 7中使用GNU awk。 FWIW两行最终将使用print prev,$0
连接起来,为了清楚起见未显示。
谢谢。关于流程,我相信第二个{{action}'总是被执行,因为它没有条件?在这种情况下为什么清楚b?此外,任何追加行结束的原因而不是使用两个打印语句? – gloopy
1. Sl。。 2.非特定。 –
此答案强制匹配必须位于相邻行中。标记为正确,因为它是最准确的解决问题的方法。 – gloopy