所望の結合出力を生成するためのAWK比較

所望の結合出力を生成するためのAWK比較

AWKを使用して2つのcsvファイルを比較し、比較結果に基づいてマージされた出力を生成しようとしています。どちらのファイルにも一致する値があるため、data2列($ 2)と一致する値(data1-$1 data2-$4)に希望の値を表示させることができますが、私が望むのはdata2-$2とdata1-$2です。これを達成する方法を学びたいです。

データ1.csv

dt-101,willow
dt-102,dogwood
dt-103b,redbud
dt-103a,plum
dt-104,cedar
ls-47,oak
ls-47a,pinoak
ls-47b,liveoak

データ2.csv

4001,00:00:00:01,eric,dt-101
4002,00:00:00:02,paul,dt-101
4003,00:00:00:03,steve,dt-103b
4004,00:00:00:04,mike,dt-104
4005,00:00:00:05,dave,ls-47b
4006,00:00:00:06,alex,dt-102
4007,00:00:00:07,adam,ls-47a

これは私が使用する文字列です。

awk -F, -v OFS=, 'NR==FNR{a[$1]; next} {print $2,a[$4]}' data1.csv data2.csv

これは私が得たものです。

00:00:00:01,dt-101
00:00:00:02,dt-101
00:00:00:03,dt-103b
00:00:00:04,dt-104
00:00:00:05,ls-47b
00:00:00:06,dt-102
00:00:00:07,ls-47a

しかし、私が望むもの

00:00:00:01,willow
00:00:00:02,willow
00:00:00:03,redbud
00:00:00:04,cedar
00:00:00:05,liveoak
00:00:00:06,dogwood
00:00:00:07,pinoak

ベストアンサー1

$ awk -F, -v OFS=, 'NR==FNR{a[$1]=$2; next} {print $2,a[$4]}' data1.csv data2.csv

#Output

[GC@GC awk]$ ls
data1.csv  data2.csv
[GC@GC awk]$ awk -F, -v OFS=, 'NR==FNR{a[$1]=$2; next} {print $2,a[$4]}' data1.csv data2.csv
00:00:00:01,willow
00:00:00:02,willow
00:00:00:03,redbud
00:00:00:04,cedar
00:00:00:05,liveoak
00:00:00:06,dogwood
00:00:00:07,pinoak
[GC@GC awk]$ 

おすすめ記事