다음 CSV 파일이 있습니다.
파일 1
19997,20161108,FSM,EXCHANGE_2,GLOBE,0
17541,20161108,TATA_MOBILE,WORLD,TELECOM,1
34556,20161108,europe,state,0
파일 2
EXCHANGE_2,CANADA,30298
WORLD,INDIA,1123
state,canada,2241
파일 1의 열 4를 파일 2의 열 1과 일치시켜 이 두 파일을 결합하는 새 파일을 어떻게 만듭니까? 결과는 다음과 같습니다.
19997,20161108,FSM,EXCHANGE_2,GLOBE,0,CANADA,30298
17541,20161108,TATA_MOBILE,WORLD,TELECOM,1,INDIA,1123
34556,20161108,europe,state,0,canada,2241
답변1
공통 필드를 통해 두 파일을 결합하는 것은 join
이 명령의 일반적인 작업입니다. awk가 아닌 다른 것으로 대답할 수 있게 해주세요. bash
코드 는 다음과 같습니다 .
join -t, -1 4 -2 1 -o 1.1,1.2,1.3,1.4,1.5,1.6,2.2,2.3 <(sort -t, -k4 file1.csv) <(sort -t, -k1 file2.csv)
답변2
어때요?
awk -F, 'NR==FNR {l[$4]=$0 ; next} {print l[$1]","$2","$3}' file1 file2
NR==FNR {l[$4]=$0 ; next}
첫 번째 파일을 읽을 때 첫 번째 블록이 활성화되고 l
네 번째 필드를 키로 사용하여 전체 행을 라는 연관 배열에 넣습니다. next
다음 설명으로 인해 해당 줄을 건너뜁니다.
두 번째 블록은 두 번째 파일을 읽을 때만 {print l[$1]","$2","$3}
활성화되며 , file2의 첫 번째 열에 지정된 키를 사용하여 file1에서 전체 저장 행을 조회합니다. 그런 다음 파일 2의 쉼표 2개와 $2 및 $3 필드와 함께 인쇄하세요.