我正在處理一些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