おはようございます。質問によく似ています。最後のパターン発生から別のパターンへのGrep(数ヶ月前)詳細を追加しながら。
私は複数の繰り返しパターンがあり、その後に私が見つけたいパターンがあるファイルのUNIXスクリプトを書こうとしています。ただし、「tac」または「tail -r」(UNIXエミュレータMKS Toolkitを使用)がなく、Pattern2より前に最後に発生したPattern1を返し、Pattern1とPattern2の間のデータを返し、もう一度Pattern2を返そうとします。この例のパターンは「条件1」と「条件2」である。
出力:
...
Condition 1: A
data1
Condition 1: B
data2
Condition 2: C
data3
Condition 1: D
data4
Condition 1: E
data5
Condition 2: F
...
返すawk(またはsedですが、awkが正しいツールだと思う)スクリプトを作成したいと思います。
Condition 1: B
data2
Condition 2: C
Condition 1: E
data5
Condition 2: F
私はこれが次の行のどんな形だと思いますが、構文を正しく取得できません。
awk '/Condition 1/ {acc = $0;} /,/Condition 2/ {print ?}' output.out
「/,/」を使うのが難しいようです。誰でも提案があれば大変感謝します。この問題に関連する助けと時間をいただきありがとうございます。
ベストアンサー1
努力する:
$ awk 'f{a=a"\n"$0} /Condition 1/{a=$0; f=1} f && /Condition 2/{print a; f=0}' output.out
Condition 1: B
data2
Condition 2: C
Condition 1: E
data5
Condition 2: F
どのように動作しますか?
f{a=a"\n"$0}
変数が
f
true(0ではない)の場合、現在の行は変数の末尾に追加されますa
。/Condition 1/{a=$0; f=1}
現在の行にが含まれている場合は、現在の行に
Condition 1
設定し、変数を1に設定します。s
f
f && /Condition 2/{print a; f=0}
f
trueで、現在の行にが含まれている場合、Condition 2
変数は印刷され、再び0にa
設定されます。f