awk 또는 bash는 CSV에서 ID를 읽고, 두 번째 CSV의 행을 일치시키고, 두 번째 열의 값을 변경합니다.

awk 또는 bash는 CSV에서 ID를 읽고, 두 번째 CSV의 행을 일치시키고, 두 번째 열의 값을 변경합니다.

.csv가 두 개 있습니다.

items-to-change.txt는 고유 ID의 단일 열 목록입니다.

218294
222084
197931
198161
197432
201021
214009

items-by-location.txt에는 고유 ID와 위치 번호가 있습니다(탭으로 구분됨)

ID  Location
197432  1
201021  2
214009  4
214438  5
214492  1
...

items-to-change.txt의 ID와 일치하는 ID의 경우 items-by-location.txt의 위치 필드를 6으로 변경한 다음 이를 기반으로 새로운 .csv(예: items-by-location2)를 생성해야 합니다. . txt

items-by-location2.txt는 다음과 같아야 합니다:

197432  6
201021  6
214009  6
214438  5
214492  1
...

awk가 좋은 해결책인가요? awk에 검색 매개변수가 있다는 것을 알고 있지만 awk를 사용하여 items-to-change.txt를 읽고 ID를 얻은 다음 items-by-location.txt를 한 줄씩 읽고 ID를 비교하는 방법이 명확하지 않습니다. 첫 번째 열 ID가 일치하고 items-by-location.txt의 두 번째 열만 일치합니다.

누구든지 예를 들어 줄 수 있습니까?

답변1

변경 목록을 배열에 추가한 다음 기본 입력 파일을 처리하는 동안 배열을 확인하는 것은 훌륭하게 작동합니다 awk.

$ awk 'FILENAME=="changeset" { replace[$1] = 1 } FILENAME=="input" {if( $1 in replace ) { $2 = 6 }; print $1,$2}' changeset input
ID Location
197432 6
201021 6
214009 6
214438 5
214492 1

관련 정보