他のパターンの前に最後に表示されたパターンを特定します。

他のパターンの前に最後に表示されたパターンを特定します。

2種類のパターンを含む巨大なファイルがあります。モード1そしてモード2モード1以前も何度もこのようなことがあったかもしれません。モード2現れる。それぞれの最後の発生を把握したいと思います。モード1それぞれ前にモード2

入力ファイル:

some text
pattern1=1
some lines
pattern1=2
some lines
pattern1=3
some lines
pattern2
some lines
pattern1=4
some lines
pattern1=5
some lines
pattern1=6
some lines
pattern1=7
some lines
pattern2

希望の出力:

pattern1=3
pattern1=7

grep私が試した間の行数を知るときモード2そして前のことモード1:

grep -B400 "pattern2" | grep "pattern1"

ただし、2つのパターン間の行数に関係なく、すべてのファイルで実行できる一意のコマンドが必要です。

ベストアンサー1

$ awk '/pattern1/{x=$0} /pattern2/{print x}' input
pattern1=3
pattern1=7

一致(完全行)をpattern1変数に保存しxpattern2一致が発生した場合に印刷します。前に空白行があるとpattern2空白行が印刷されpattern1、これが望ましくないかどうかを検出するにはより多くのロジックが必要です。入力の終わりが前に来pattern1ないすべての末尾aは削除されます。pattern2

おすすめ記事