異なるファイルからの複数のデータを含むファイルの解析

異なるファイルからの複数のデータを含むファイルの解析

a.txtの3つのデータ(A、B、num:xxx)に基づいてb.txtの行を選択したいと思います。

a.txt

A B num : 580
A B num : 581
A B num : 582

b.txt

10 E1 A Z1 B Z2 num : 580 Z3 582 Z4
11 E2 C Z1 B Z2 num : 581 Z3 580 Z4
12 E3 A Z1 B Z2 num : 581 Z3 580 Z4
14 E3 S Z1 B Z2 num : 582 Z3 581 Z4
15 E2 A Z1 B Z2 num : 582 Z3 581 Z4

出力

10 E1 A Z1 B Z2 num : 580 Z3 582 Z4
12 E3 A Z1 B Z2 num : 581 Z3 580 Z4
15 E2 A Z1 B Z2 num : 582 Z3 581 Z4

私のコード

awk 'NR==FNR{pattern[$0];next} ($3 && $5 && "$7 $8 $9" in pattern)' a.txt b.txt > GoodFile.txt

これは何の問題ですか?ありがとうございます。

ベストアンサー1

連想配列のキーはpattern次のとおりです。文字列の連結フィールドとフィールドの区切り記号、つまり

$ awk 'NR==FNR{pattern[$0]; next} $3" "$5" "$7" "$8" "$9 in pattern' a.txt b.txt
10 E1 A Z1 B Z2 num : 580 Z3 582 Z4
12 E3 A Z1 B Z2 num : 581 Z3 580 Z4
15 E2 A Z1 B Z2 num : 582 Z3 581 Z4

a.txtあるいは、より強力であるかもしれません(区切り文字が単一の空白であると仮定していないので)、明示的なSUBSEPawk変数を使用してください。エドモートンが提案したように:

awk 'NR==FNR{pattern[$1,$2,$3,$5]; next} ($3,$5,$7,$9) in pattern' a.txt b.txt

おすすめ記事