awkを使用して他のファイルの内容に基づいてファイルからデータを抽出するには?

awkを使用して他のファイルの内容に基づいてファイルからデータを抽出するには?

2つのファイルがあります。ファイルには構造化データが含まれています。以下はその例です。

article 1 title
article 1 body line 1
article 1 body line 2
+++
article 2 title
article 2 body line 1
article 2 body line 2
article 2 body line 3
+++
article 3 title
article 3 body line 1
article 3 body line 2
+++
article 4 title
article 4 body line 1
article 4 body line 2
article 4 body line 3

ご覧のとおり、レコード+++区切り記号です。各レコードの最初の行はタイトルであり、他のすべての行はそのレコードの内容です。他のファイルは、ヘッダーリストを含む単純なテキストファイルです。たとえば、

article 1 title
article 3 title
article 4 title

私が望むのは、2番目のファイルにリストされているタイトルのレコードです。したがって、前述の例の場合、予想される結果は次のとおりです。

article 1 title
article 1 body line 1
article 1 body line 2
+++
article 3 title
article 3 body line 1
article 3 body line 2
+++
article 4 title
article 4 body line 1
article 4 body line 2
article 4 body line 3

私の問題を解決することが可能かもしれないと思いますが、awk方法がわかりません。

私が試したことは次のとおりです。

awk 'BEGIN{RS="(\r?\n)?\+{3}(\r?\n)?"; FS="\r?\n"; ORS="+++"} NR==FNR{a[$0];next} ...' title_list.txt data.txt

私の問題は、RS2つのファイルが異なるはずですが、どのように機能させるのかわからないということです。

ベストアンサー1

ファイルごとにRSなどの変数を個別に設定できます。たとえば、

$ awk 'NR==FNR{a[$0];next} $1 in a' RS='\r?\n' title_list.txt RS='+++\r?\n' FS='\r?\n' ORS='+++\n' data.txt
article 1 title
article 1 body line 1
article 1 body line 2
+++
article 3 title
article 3 body line 1
article 3 body line 2
+++
article 4 title
article 4 body line 1
article 4 body line 2
article 4 body line 3
+++

おすすめ記事