awk on csv files

wk on csv files
Hi I have two csv files
1 ) keys.csv with data as below

XX1,offsite
XX2,offsite
XX8,none
XX3,offsite
XX4,onsite
XX7,none
XX5,onsite
XX6,onsite
XX15,none

2) source.csv file with data like

1,0123,ppp,XX1
2,0122,sss,XX2
3,1239,yyy,XX8
4,567,kkk,XX5
5,999,qqq,XX6
6,1234,sss,XX15
7,2456,ggg,XX3
8,635,ttt,XX4
9,987,www,XX7
10,154,sqt,XX7
11,1000,sss,XX15
12,1231,sss,XX15
13,1230,sss,XX15

output needed is after comparing files the 2nd field from first file should get appended to where ever the 1st field from file 1 matches with field 3 from second file
i.e sample output

1,0123,ppp,XX1,offsite
2,0122,sss,XX2,offsite
3,1239,yyy,XX8,none
4,567,kkk,XX5,onsite
5,999,qqq,XX6,onsite
6,1234,sss,XX15,none
7,2456,ggg,XX3,offsite
8,635,ttt,XX4,onsite
9,987,www,XX7,none
10,154,sqt,XX7,none
11,1000,sss,XX15,none
12,1231,sss,XX15,none
13,1230,sss,XX15,none

tried below it does not work any pointers on what could be wrong ?

awk -F ',' 'NR == FNR {f[$1] = $2;next} $3 in f { print $0","f[$1]}' keys.csv source.csv

I think you're thinking of the wrong "joining" key.
try this:

awk -F, 'FNR==NR {f1[$1]=$2;next} $4 in f1 {print $0,f1[$4]}' OFS=, keys.csv source.csv
2 Likes

Thank you :slight_smile: it worked ,my Bad :o