awk에서 반복성을 기준으로 값을 일치시키고 합계를 인쇄합니다.

awk에서 반복성을 기준으로 값을 일치시키고 합계를 인쇄합니다.

다음 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 필드와 함께 인쇄하세요.

관련 정보