두 개의 csv 파일을 비교하고 일치하는 데이터를 새 csv 파일로 추출합니다.

두 개의 csv 파일을 비교하고 일치하는 데이터를 새 csv 파일로 추출합니다.

비슷한 내용/데이터를 가진 두 개의 csv 파일이 있습니다.


파일 1.csv

ADIS
BAP3
Mercury_System
nxh-2003
DR_FeatureUP_PT

파일 2.csv

ADIS,projects.adis
EcoSystems,projects.ecosystems
em1xxxsw,projects.em1xxxsw
BAP3,projects.bap3
Dirana4,projects.dirana4
Mercury_System,projects.mercury_system
nxh-2003,projects.nxh-2003
DocStore,projects.docstore
DR_FeatureUP_PT,projects.dr_featureup_pt

예상되는출력.csv

ADIS,projects.adis
BAP3,projects.bap3
Mercury_System,projects.mercury_system
nxh-2003,projects.nxh-2003
DR_FeatureUP_PT,projects.dr_featureup_pt

해당 쿼리에 대한 명령을 알려주세요.

답변1

사용밀러( mlr)는 지정된 필드에서 두 개의 CSV 데이터세트를 결합합니다 ADIS.

$ mlr --csv join -j ADIS -f file1.csv file2.csv
ADIS,projects.adis
BAP3,projects.bap3
Mercury_System,projects.mercury_system
nxh-2003,projects.nxh-2003
DR_FeatureUP_PT,projects.dr_featureup_pt

ADIS실제로 필드 이름이 아닌 경우 두 개의 CSV 파일 은헤더 없음, 다음을 사용합니다(입력을 헤더 없는 CSV로 읽고 작업에서 필드 이름 대신 필드 번호를 사용 join).

$ mlr --csv -N join -j 1 -f file1.csv file2.csv
ADIS,projects.adis
BAP3,projects.bap3
Mercury_System,projects.mercury_system
nxh-2003,projects.nxh-2003
DR_FeatureUP_PT,projects.dr_featureup_pt

두 번째 명령의 출력것 같다첫 번째 명령과 동일합니다. 그러나 각 파일의 첫 번째 행은 더 이상 헤더 행으로 해석되지 않고 데이터 필드의 레코드로 해석됩니다.

이는 입력 데이터 파일이 DOS 또는 Unix 텍스트 파일인지 여부에 관계없이 작동합니다.

답변2

grep을 사용하십시오.

grep -Ff file1.csv file2.csv > outfile.csv

awk를 사용하세요

awk -F, 'NR==FNR{seen[$0]++;next} ($1 in seen)' file1.csv file2.csv > outfile.csv

답변3

셸에서 간단한 스크립트를 실행하여 이 문제를 해결할 수 있습니다. 이것을 사용해 보세요:

while read i; do grep $i ./file2.csv >> output.csv; done < file1.csv

원하는 결과가 포함된 output.csv라는 새 파일이 생성됩니다. file1.csv, file2.csv 파일이 저장된 폴더에서 실행해야 합니다.

답변4

Bash 프로세스 대체를 사용하면 파일을 정렬한 다음 "결합"할 수 있습니다.

join -t, <(sort file1.csv) <(sort file2.csv) > output.csv

관련 정보