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]$