最初のパターンが2番目に表示される場合にのみ、2つのパターンの間に印刷

最初のパターンが2番目に表示される場合にのみ、2つのパターンの間に印刷

2つのパターン間の出力を印刷したいです。最初のパターンはファイル内で2番目に一致する必要があります。

はい -

test.txt

start one
text_1   
end
start two
text_2
end 
start three
text_3
end

ここで、最初のモードはstartで、2番目のモードはですend。パターンはstartファイル内の2番目のパターン一致でなければなりません。その後、出力は次のようになります

start two
text_2
end

ベストアンサー1

以下を使用してn番目のレコードawk簡単に拡張できます。

awk '/start/ && ++n == 2, /end/' < file

start2番目の発生から最初の発生まで行を印刷しますend

2番目のstartレコードを印刷します(、endがある場合は順序が異なります)。startstartend

awk '
  /start/, /end/ {
    if (!seen) {seen = 1; n++}
    if (n == 2) print
    if (/end/) seen = 0
  }' < file

または:

awk '
  !inside && /start/ {inside = 1; n++}
  !inside {next}
  n == 2
  /end/ {inside = 0}' < file 

おすすめ記事