私は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
Iは、溶液の半分の動作を有しています。 \t130$
と一致し、次の行を取得し、シーケンスが一致した場合に出力します。それは良いデータを返しますが、重複する値130を処理しません。この例のデータでは、シーケンス14は省略されています。隣接する重複する行の数は任意ですので、別のテストをネストするのは馬鹿です。
awk "/\t130$/ {seq=$5; prev=$0; getline;} $5==seq {print prev; print;}"
開始条件のすべての重複を処理するにはどうすればよいですか?
Windows 7でGNU awkを使用しています。 FWIW 2行は、わかりやすくするために、print prev,$0
を使用して最終的に連結されます。
ありがとうございます。フローに関しては、第2の '{action}'は条件がないので常に実行されると思いますか?どのような場合に、なぜクリアb?また、2つのprint文を使うのではなく、行末を追加する理由は何ですか? – gloopy
1.気晴らし。 2.特に重要ではない。 –
この回答は、一致が隣接する行になければならないことを強制します。それが問題に最も正確に当てはまるように正確にマーキングする。 – gloopy