AWK compara a ajuda para produzir saída mesclada desejada

3

Eu estou tentando usar o AWK para comparar dois arquivos csv e gerar uma saída mesclada com base nos resultados da comparação. Ambos os arquivos têm um valor correspondente e posso obtê-lo para exibir o valor desejado na coluna data2 ($ 2) com o valor de correspondência (data1- $ 1 data2- $ 4), mas o que eu quero é data2- $ 2 e data1- $ 2. Procurando ajuda para entender como fazer isso acontecer.

data1.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

data2.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

Aqui está a string que estou usando

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

Aqui está o que eu recebo

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

Mas o que eu quero é

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

Agradecemos antecipadamente

    
por cw2 09.03.2017 / 18:30

1 resposta

2

$ 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]$ 
    
por 10.03.2017 / 00:30

Tags