2つのファイルの列の一致

2つのファイルの列の一致

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

おすすめ記事