두 열의 일치를 기반으로 두 파일을 병합하는 방법은 무엇입니까? CSV

두 열의 일치를 기반으로 두 파일을 병합하는 방법은 무엇입니까? CSV

나는 file1을 좋아한다:

6688249-7,03/02/2017,5515, 2017년 2월 2일

16914917-8,03/02/2017,5521, 2017년 2월 2일

파일 2도 있습니다.

5515,6688249-7,06-02-2017 04:25:47 PM,ASIG,엘리자베스 프리에토

5515,6688249-7,06-02-2017 04:56:32 PM,URR,엘리자베스 프리에토

5521,16914917-8,06-02-2017 오후 12:51:04,지정,SOLANGE

5521,16914917-8,27-02-2017 04:32:11 PM(예: SOLANGE)

다음과 같은 file3을 원합니다.

6688249-7,03/02/2017,5515,02-feb-17,06-02-2017 04:25:47 PM,ASIG,엘리자베스 프리에토

6688249-7,03/02/2017,5515,02-feb-17,06-02-2017 04:56:32 PM,URR,엘리자베스 프리에토

16914917-8,03/02/2017,5521,02-feb-17,06-02-2017 12:51:04 PM,ASIGN,SOLANGE

16914917-8,03/02/2017,5521,02-feb-17,27-02-2017 04:32:11 PM,Ex,SOLANGE

2번째 컬럼의 키(3번째 컬럼의 file1, 1번째 컬럼의 file1)를 통해 file2의 3번째, 4번째, 5번째 컬럼을 file1에 넣는다는 뜻이다.

답변1

다음과 같은 것으로 충분합니다.

awk 'BEGIN{FS=OFS=","}NR==FNR{a[$3]=$0;next}$1 in a{print a[$1],$3,$4,$5}' file1 file2

답변2

출력 정렬 순서가 중요하지 않은 경우 작업처럼 보입니다.join

join -1 3 -2 1 -t, -o 1.1,1.2,1.3,1.4,2.3,2.4,2.5 <(sort -k3,3 -t, file1) \
    <(sort -k1,1 -t, file2)


6688249-7,03/02/2017,5515,02-feb-17,06-02-2017 04:25:47 PM,ASIG,ELIZABETH PRIETO
6688249-7,03/02/2017,5515,02-feb-17,06-02-2017 04:56:32 PM,URR,ELIZABETH PRIETO
16914917-8,03/02/2017,5521,02-feb-17,06-02-2017 12:51:04 PM,ASIGN,SOLANGE
16914917-8,03/02/2017,5521,02-feb-17,27-02-2017 04:32:11 PM,Ex,SOLANGE

입력은 조인 키에 따라 정렬 되어야 합니다 join. 위의 예에서는 프로세스 대체를 사용합니다(다음과 같은 쉘에서 지원됨).bash

관련 정보