두 개의 파일이 있습니다 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