두 파일의 공통 키를 사용하지만 awk를 사용하여 특정 열에 값을 인쇄하는 방법

두 파일의 공통 키를 사용하지만 awk를 사용하여 특정 열에 값을 인쇄하는 방법

기본 파일 bla.tsv(FS= \t)가 있습니다.

id hub fil plop
34  ji ji
54  jo jo
46  ja ja

그리고 정보 파일hub.csv(FS= ,):

34,fuse
46,fose

정보를 다음과 같은 열에 인쇄하고 싶습니다 hub.csv.hubbla.tsv

id hub fil plop
34 fuse ji ji
54  jo jo
46 fose ja ja

올바른 행에 올바른 정보를 인쇄했지만 마지막 열 다음 열에 인쇄했습니다.

awk -v OFS="\t" 'NR==FNR{a[$1]=$2;next}{print $0,a[$1]}' FS="," hub.csv FS="\t" bla.tsv > result.tsv

(있는 경우) bla.tsv에 있는 값으로 두 번째 열을 어떻게 채울 수 있나요? hub.csv의 구조는 bla.tsv이미 "정확"합니다. 즉, 헤더 뒤의 모든 행에 빈 두 번째 열이 있습니다( \tID 뒤의 두 개의 연속 열).

답변1

형식이 bla.tsv이미 정확하고 두 번째 열이 비어 있으므로 방법을 최소한으로 수정하면 됩니다.

awk -v OFS="\t" 'NR==FNR{a[$1]=$2;next} ($1 in a){$2=a[$1]} 1' FS="," hub.csv FS="\t" bla.tsv > result.tsv

처리하는 동안 ID에 배열의 일치하는 값이 있는지 bla.tsv확인 합니다 . 그렇다면 두 번째 필드를 해당 값으로 설정하고 일반적으로 현재 행(수정 사항 포함)을 인쇄합니다.huba

관련 정보