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변경하고 싶습니다 . 내가 원하는 것은 다음과 같습니다.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은 입력의 네 번째 필드가 아니기 때문에 마지막 줄은 예상한 것과 다릅니다 . 의 마지막 줄에 쉼표가 누락되었을 수 있습니다 Address.csv.

관련 정보