最後のパターン発生から別のパターンへのGrep

最後のパターン発生から別のパターンへのGrep

おはようございます、

私は複数の繰り返しパターンがあり、その後に私が見つけたいパターンがあるファイルのUNIXスクリプトを書こうとしています。この質問は次のようによく似ています。

他のパターンの前に最後に表示されるパターンを取得します。しかし、「tac」(または「tail -r」)がなく、String2とString2の前の最後のString1を返そうとします。

出力:

...
Condition 1: A
foo
Condition 1: B
foo
Condition 2: C
foo
Condition 1: D
foo
Condition 1: E
foo
Condition 2: F
...

次を返すgrep / sed / awkスクリプトを作成したいと思います。

Condition 1: B
Condition 2: C
Condition 1: E
Condition 2: F

条件1は常に条件2の上の「x」行なので、次のようにしてみました。

grep -B x "Condition 2"

そこで何らかの理由で結果スクリプト出力の2番目の発生が一番上で数行で停止するため(条件1は表示されません)、条件1/2の理由の間に空白行がある可能性があるため、わかりません。だからgrep -Bの使用を放棄しました。私は「戻る」grepできるので、tacが役に立つと思いましたが、私の環境にはtacコマンド(またはtail -r)はありません。

誰でも提案があれば大変感謝します。お時間をいただきありがとうございます。

ベストアンサー1

まあ、うまくgrepいかない場合は動作するawkかどうかはわかりませんが、次のことを試すことができます。

awk '/Condition 1/ { acc = $0; } /Condition 2/ { print acc; print; }' input

おすすめ記事