비슷한 내용/데이터를 가진 두 개의 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