AWK confrontando due file e stampando singole colonne

Aug 25 2020

Ho bisogno di aiuto per confrontare due file usando lo script awk. Confronta la seconda colonna di file1.csv con la prima colonna di file2.csv, se corrisponde stampa la riga nel seguente formato previsto.

file1.csv

abc,id123,newyork
bcd,id456,seattle

file2.csv

id678,bbb,ccc
id123,hhh,ddd

formato previsto:

abc,id123,hhh,newyork,{hhh,ddd},ddd

Finora sono in grado di stampare fino a quanto segue

abc,id123,newyork,hhh,ddd

usando il seguente awk,

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

Risposte

3 John1024 Aug 25 2020 at 07:20

Eri vicino. Provare:

$ awk -F, 'FNR==NR{f1[$2]=$1; f3[$2]=$3; next} $1 in f1 {printf "%s,%s,%s,%s,{%s,%s},%s\n",f1[$1],$1,$2,f3[$1],$2,$3,$3}' file1.csv file2.csv
abc,id123,hhh,newyork,{hhh,ddd},ddd

Le aggiunte chiave qui sono l'uso di un secondo array f3per catturare l'input e printfper ottenere un output completamente formattato.