次のファイル構造を想像してみてください。
foo.bar.1
blabla
moreblabla
relevant=yes
foo.bar.2
relevant=no
foo.bar.3
blablabla
foo.bar.4
relevant=yes
私は自分に従い、次の行の前に行のドアがあるfoo.bar
ブロック内のすべての行を検索したいと思います。foo.bar
relevant=yes
したがって、出力は次のようになります。
foo.bar.1
foo.bar.4
行を繰り返し、次の行の前に行がある場合は、覚えてfoo.bars
印刷するプログラム/スクリプトを確実に作成できます。しかし、私の考えには1つあたりはあると思います。relevant=yes
foo.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 = ""}}
'