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の郵便番号フィールドと一致する場合、4 番目のフィールドをからAddress.csvに変更します。必要な変更内容は次のとおりです。cityfound

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入力の 4 番目のフィールドではないため、予想どおりではないことに注意してください。 の最後の行にカンマが欠落している可能性がありますAddress.csv

関連情報