awk substitui o valor do campo com base no valor correspondente em outro arquivo

awk substitui o valor do campo com base no valor correspondente em outro arquivo

Eu tenho 2 arquivos Zipcode.txte 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

Se o campo CEP Zipcode.txtcorresponder ao campo CEP em Address.csv, desejo alterar o quarto campo de citypara found. Aqui está o que eu quero:

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

Isto é o que eu tentei:

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

Responder1

Isso pesquisará se o CEP no primeiro campo Address.csvé encontrado em algum lugar em Zipcode.txt:

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

Saída:

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

Observe que a última linha não é a esperada, porque citynão é o quarto campo na entrada: provavelmente está faltando uma vírgula na última linha de Address.csv.

informação relacionada