単語リストを含む段落を探す

単語リストを含む段落を探す

Pattern.txtというファイルに単語のリストがあります。リスト内のすべての単語を含む入力ストリームの段落を検索する必要があります。段落の単一の単語(foo)には通常、sedコードを使用します。

sed   '/./{H;$!d;}; x;/foo/!d'

しかし、単語リストでこれを行う方法がわかりません。

ベストアンサー1

GNU awkを使う:

$ cat patterns.txt
foo
bar
baz
$ cat file
first paragraph foo bar

second baz bar foo

third

fourth foo baz bar

fifth baz foo

これはcat file入力ストリームを表します。

$ cat file | gawk '
    NR == FNR {pattern[++n] = $0; next}
    ENDFILE {RS = ""; ORS = "\n\n"}
    {for (i = 1; i <= n; i++) if ($0 !~ pattern[i]) next; print}
' patterns.txt -   # note the trailing hyphen
second baz bar foo

fourth foo baz bar

RS = ""空白行で区切られた段落をレコードに読み込むには、awkを変更します。

おすすめ記事