2개의 서로 다른 csv 파일의 2개 열 비교

2개의 서로 다른 csv 파일의 2개 열 비교

내 목적은 두 개의 서로 다른 csv 파일의 특정 열을 비교하고 첫 번째 파일에 없는 두 번째 파일에서 데이터를 가져오는 것입니다. 예를 들어.

첫 번째 파일

"siddhartha",1
"mukherjee",2

두 번째 파일

"siddhartha",1
"mukherjee",2
"unique",3

예상 출력

"unique",3

다음 명령은 첫 번째 열의 텍스트 크기가 제한되어 있을 때 잘 작동하므로 위의 예에서도 잘 작동합니다.

awk -F',' 'FNR==NR{a[$1];next};!($1 in a);' file1.csv file2.csv > file3.csv

그러나 첫 번째 열의 텍스트 크기가 상당히 커서(예: 10000자) 작동하지 않습니다. 특정 지점에서 텍스트를 자릅니다.

해결책이 있나요?

답변1

위의 간단한 예를 기반으로 하면 이것이 작동합니다. 첫 번째 열의 데이터가 다른 열로 끝나거나 데이터에 공백이 있으면 실패합니다.

bash와 GNU grep을 사용하십시오.

grep -v -Ff <(cut -d',' -f 1 file1.csv) file2.csv > file3.csv

설명하다

  • -v역 매칭
  • -Ff파일을 스키마 소스로 사용
  • <(cut -d',' -f 1 file1.csv)데이터의 첫 번째 열을 가져와서 "파일"로 사용합니다.

답변2

awk를 사용하지 않는 솔루션은 다음과 같습니다.밀러:

$ mlr --nidx join -u -j 1 --np --ur -f file1.csv file2.csv
"unique",3

설명하다:

  • --nidx열은 위치에 따라 인덱싱되기 때문에(즉, 헤더 행이 없음)
  • -u연결 옵션에는 정렬 입력이 필요하지 않습니다.
  • -j 1왼쪽 및 오른쪽 파일의 열 1을 결합합니다.
  • --np --ur짝을 이룬 줄을 내보내지 말고, 짝이 없는 줄을 오른쪽 파일에 내보냅니다.

관련 정보