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

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

두 개의 파일이 있습니다 B.csv.

1,AD
2,AB
3,AC
5,AF
7,AE

그리고 C.csv:

1,x
3,z
5,y

이 출력을 얻으려면 어떻게 해야 합니까?

1,AD,x
2,AB,
3,AC,z
5,AF,y
7,AE,

두 파일의 공통 열 1을 일치시킴으로써?

답변1

사용가입하다

join -t, -a1  B.csv C.csv

왼쪽 외부 조인을 나타냅니다 -a1. 즉, file2에는 없는 file1의 행을 표시합니다.

짝이 없는 줄의 끝에 쉼표가 있는 경우진짜문제

(join -t, B.csv C.csv ; join -t, -v1 B.csv C.csv | perl -pe "s/$/,/" ) | sort

답변2

사용할 때 원본 파일의 줄을 엉망으로 만들지는 않지만 awk첫 번째 파일을 메모리에 로드해야 하며 메모리에 맞지 않는 큰 파일에서 실행하지 않도록 주의해야 합니다.

awk 'BEGIN        { FS=OFS="," }
     NR==FNR      { hold[$1]=$2; next }
{ print $0, hold[$1] }' fileC fileB

이 경우 키가 fileC에는 있지만 fileB에는 없고 fileC에 키를 인쇄하려면 다음을 수행합니다.

awk 'BEGIN        { FS=OFS="," }
     NR==FNR      { hold[$1]=$2; next }
{ print $0, hold[$1]; delete hold[$1] }

END{ for(x in hold) print x, hold[x] }' fileC fileB

관련 정보