次のようにfile1があります。
2010,92614,0,1
2010,92614,4,1
file2 は次のようになります。
2010,0,907894
2010,1,17788
2010,2,2827
2010,3,1212
2010,4,669914
file1のフィールド1と3、file2のフィールド1と2で2つのファイルを結合したいと思います(たとえば、2つのファイルの最初のレコードは2010と0です)。出力は次のようになります。
2010,92614,0,1,907894
2010,92614,4,1,669914
つまり、行と一致するように、file2のフィールド3をfile1に追加する必要があります。次のコードを試すと、file1のデータは提供されますが、file2のフィールド3は提供されません。
awk -F, 'NR==FNR {a[$1,$2]=$3; next} {print $0,a[$1,$2]}' OFS=, file2 file1
私は間違って理解しています:
2010,92614,0,1,
2010,92614,4,1,
末尾にカンマがありますが、データはありません。 file1の一致するフィールドが互いに隣接していないためであると思います。 file1のフィールドを次のように並べ替えると
awk -F, '{print $1,$3,$2,$4}' OFS=, file1 > file1_mod
その後、コードを追加すると機能します。私の質問は:フィールドの順序を変更せずにどのように参加できますか?
基本的なBash "join"コマンドは、いくつかのトリックを使用して複数のフィールドを組み合わせることができますが、その解決策には興味がありません。 awkを使いたいです。