2つのファイルがあります。 file1の一部の名前はfile2にもあります。最初のファイルの$ 3と2番目のファイルの$ 2が一致した後、2番目のファイルの$ 3と$ 4列を最初のファイルに割り当てるにはどうすればよいですか?とても感謝しています。
file1.dat
1 2.5 S1 2.5
1 54 S2 2.5
2 465 S3 1.4
2 65 D 4.2
3 465 P 4.2
3 897 L 4.2
4 12 H_L 4.2
4 46 H_M 4.2
file2.dat
1 S1 2.55 4
2 S2 2.56 6
3 S3 1.44 8
4 D 4.22 7
5 H_L 4.2 6
6 H_M 4.2 65
希望の出力:
1 2.5 S1 2.5 2.55 4
1 54 S2 2.5 2.56 6
2 465 S3 1.4 1.44 8
2 65 D 4.2 4.22 7
3 465 P 4.2 - -
3 897 L 4.2 - -
4 12 H_L 4.2 4.2 6
4 46 H_M 4.2 4.2 65
ベストアンサー1
この問題はここで何度も解決されました。どうですか?
awk 'NR==FNR {Tmp[$2] = $3 FS $4; next} ($3 in Tmp) {print $0 FS Tmp[$3]}' file2 file1
1 2.5 S1 2.5 2.55 4
1 54 S2 2.5 2.56 6
2 465 S3 1.4 1.44 8
2 65 D 4.2 4.22 7
4 12 H_L 4.2 4.2 6
4 46 H_M 4.2 4.2 65
file2の必須フィールドをindexの配列として読み込み、file1が配列のインデックスと一致する場合はrespを追加します$2
。$3
要素を に追加し$0
て印刷します。
一致しない2行の場合は、次のようにしてみてください。
awk 'NR==FNR {Tmp[$2] = $3 FS $4; next} ($3 in Tmp) {print $0 FS Tmp[$3]; next} {print $0, "- -"}' file2 file1
1 2.5 S1 2.5 2.55 4
1 54 S2 2.5 2.56 6
2 465 S3 1.4 1.44 8
2 65 D 4.2 4.22 7
3 465 P 4.2 - -
3 897 L 4.2 - -
4 12 H_L 4.2 4.2 6
4 46 H_M 4.2 4.2 65