awkを使用した複数フィールドの接続

awkを使用した複数フィールドの接続

次のように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を使いたいです。

ベストアンサー1

おすすめ記事