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.