awk заменяет значение поля на основе соответствующего значения в другом файле

awk заменяет значение поля на основе соответствующего значения в другом файле

У меня есть 2 файла, Zipcode.txtи 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

Если поле почтового индекса в Zipcode.txtсовпадает с полем почтового индекса в Address.csv, я хочу изменить 4-е поле с cityна found. Вот что я хочу:

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

Вот что я попробовал:

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

решение1

Будет выполнен поиск почтового индекса, Address.csvуказанного в первом поле, в следующих местах Zipcode.txt:

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

Выход:

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

Обратите внимание, что последняя строка не соответствует ожидаемому значению, поскольку cityэто не четвертое поле во входных данных: вероятно, в последней строке отсутствует запятая Address.csv.

Связанный контент