awk reemplaza el valor del campo según el valor coincidente en otro archivo

awk reemplaza el valor del campo según el valor coincidente en otro archivo

Tengo 2 archivos Zipcode.txty Address.csv:

ZipCode.txt
12345
23456
34567
45678

Address.csv
12345,3587 main st,apt j1,city,new jersey
23456,4215 1st st. s.,suite a2,city,new jersey
65432,115 main st,,city,new jersey
45678,654 2nd st n.,city,new jersey

Si el campo de código postal Zipcode.txtcoincide con el campo de código postal de Address.csv, quiero cambiar el cuarto campo de citya found. Esto es lo que quiero:

12345,3587 main st,apt j1,found,new jersey
23456,4215 1st st. s.,suite a2,found,new jersey
65432,115 main st,,city,new jersey
45678,654 2nd st n.,found,new jersey

Esto es lo que he probado:

awk -F',' 'BEGIN{OFS=FS}NR==FNR{a[$1]=1;next}a[$1]{$4="found"}1' Address.csv ZipCode.txt

Respuesta1

Esto buscará si el código postal en el primer campo de Address.csvse encuentra en algún lugar de Zipcode.txt:

awk -F, -v OFS="," 'NR==FNR {a[$1]++;next} $1 in a {$4="found"} 1' Zipcode.txt Address.csv

Producción:

12345,3587 main st,apt j1,found,new jersey
23456,4215 1st st. s.,suite a2,found,new jersey
65432,115 main st,,city,new jersey
45678,654 2nd st n.,city,found

Tenga en cuenta que la última línea no es la esperada, porque cityno es el cuarto campo de la entrada: es probable que falte una coma en la última línea de Address.csv.

información relacionada