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.

관련 정보