異なる行に基づいてファイルから行を検索する

異なる行に基づいてファイルから行を検索する

次のファイル構造を想像してみてください。

foo.bar.1
blabla
moreblabla
relevant=yes
foo.bar.2
relevant=no
foo.bar.3
blablabla
foo.bar.4
relevant=yes

私は自分に従い、次の行の前に行のドアがあるfoo.barブロック内のすべての行を検索したいと思います。foo.barrelevant=yes

したがって、出力は次のようになります。

foo.bar.1
foo.bar.4

行を繰り返し、次の行の前に行がある場合は、覚えてfoo.bars印刷するプログラム/スクリプトを確実に作成できます。しかし、私の考えには1つあたりはあると思います。relevant=yesfoo.barこれ以外にも標準のUnixユーティリティ(grep / sed / awk)を使用するボックス方式ですか?

どんなヒントでもありがとう!

ベストアンサー1

入力が1行ずつ処理される場合、処理は次のようになります。

  • 現在行がある場合は、出力がアクティブでない前の行foo.barを忘れて保存します。foo.bar
  • 現在の行がある場合、relevant=yes最新のfoo.bar出力が有効になります。

この推論はawkの仕事です。 (痛みが好きなら、sedでも行うことができます。)

awk '
    /^foo\.bar/ { foobar = $0 }
    /^relevant=yes$/ {if (foobar != "") {print foobar; foobar = ""}}
'

おすすめ記事