同じパターンが複数回出現する間に行を印刷するには?

同じパターンが複数回出現する間に行を印刷するには?

指定された検索パターンと発生回数が同じパターンの間の行を抽出する必要があります。

同様に、検索パターンの最初の発生と2番目の発生の間の行、または3番目と4番目の発生の間の行を取得したいと思います。パターン間に線がない場合があります。パターン間に線がない場合、出力は空でなければなりません。

例: -

Line 1
Line 2
Line 3
Pattern
Line 5
Line 6
Line 7
Pattern
Line 8
Line 9
Pattern
Line 11
Line 12
Pattern
Line 13
Pattern
Pattern

最初の発生と2番目の発生の間に予想される出力ライン

Line 5
Line 6
Line 7

3番目と4番目の発生の境界線

Line 11
Line 12

ベストアンサー1

に基づいてこの回答

awk '/Pattern/{n+=1}; n % 2 == 1 && ! /Pattern/ {print > "output"((n-1)/2)}' input_file 

説明する

  • /Pattern/{n+=1}:一致時に1をPattern加えますn
  • n % 2 == 1 && ! /Pattern/:n が奇数の場合にのみ (つまり、各置換パターンの後)、次を実行します。また、Pattern上記の行を無視してください。
  • {print > "output"((n+1)/2)}':上記がtrueの場合、行は名前付きファイルに印刷されますoutputx。ここでis x((n+1)/2)つまりoutput1、、...output2output3

おすすめ記事