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
あるいは、より強力であるかもしれません(区切り文字が単一の空白であると仮定していないので)、明示的なSUBSEP
awk変数を使用してください。エドモートンが提案したように:
awk 'NR==FNR{pattern[$1,$2,$3,$5]; next} ($3,$5,$7,$9) in pattern' a.txt b.txt