두 개의 CSV 파일을 결합하는 방법은 무엇입니까?


22

ID와 이메일이라는 두 개의 필드가있는 하나의 CSV 파일이 있다고 가정하십시오. 이메일과 이름이라는 두 개의 필드가있는 다른 파일이 있습니다. 세 개의 필드가 모두 이메일로 결합 된 파일을 어떻게 생성 할 수 있습니까?


5
조인에 대해 좀 더 자세히 설명합니다 (즉, 내부, 외부, 왼쪽). 첫 번째 CSV의 이메일 목록 이 두 번째 목록 과 동일 합니까? 아니면 하나 더 포함되어 있습니까?
— hyperslug

csv 파일의 예는 사용중인 OS와 함께 사용하기 편리합니까?
— Troggy

나는 첫 번째와 두 번째 목록이 동일하다고 생각합니다. Linux를 사용하고 있습니다. 도와주세요!!! 감사!! :)
— crst53

1
데이터가 얼마나 큽니까?
— Joshua

답변:


24

개정 3 :

이메일에서 두 목록을 알파벳순으로 정렬 한 다음 가입해야합니다. 이메일 필드 file1의 두 번째 필드와 file2의 첫 번째 필드를 가정하십시오.

sort -t , -k 2,2 file1.csv > sort1.csv
sort -t , -k 1,1 file2.csv > sort2.csv
join -t , -1 2 -2 1 sort1.csv sort2.csv > sort3.csv

매개 변수 의미

-t, : ','는 필드 구분자입니다.
-k 2,2 : 두 번째 필드의 문자 정렬
-k 1,1 : 첫 번째 필드의 문자 정렬
-1 2 : 파일 1, 2 번째 필드
-2 1 : 파일 2, 첫 번째 필드
> : 파일로 출력

생산

이메일, ID, 이름
이메일, ID, 이름
...

알파벳순으로 이메일을 기준으로 정렬합니다.

두 파일 중 하나에서 누락 된 이메일이 있으면 결과에서 생략됩니다.


2
CSV는 이보다 더 복잡합니다. 예를 들어 필드 구분 기호를 이스케이프 처리 할 수 ​​있습니다.
— pguardiario

@hyperslug 전체 외부 가입을 할 수 있습니까?
— Abu Shoeb

ID에 쉼표가 포함되어 있으면 CSV가 따옴표로 묶여 있거나 인용되지 않은 경우 작동하지 않습니다. 결과를 확인하는 일회성 처리에만이 솔루션을 사용하십시오. 그러나 프로덕션 레벨 스크립트에는 사용하지 않는 것이 좋습니다.
— Ondra Žižka

25

csvkit 사용 :

csvjoin -c email id_email.csv email_name.csv

또는

csvjoin -c 2,1 id_email.csv email_name.csv

4
이것이 왜 정답이 아닌가?
— alexg

멋진 도구. 심지어 내 파일 중 하나가 ","구분 기호와 다릅니다.
— D_K

6

아마도 과도하지만, 두 가지 종류의 테이블로 데이터베이스 (예 : OpenOffice Base)로 가져 와서 원하는 출력 인 보고서를 정의 할 수 있습니다.

CSV 가져 오기에 문제가있는 경우 스프레드 시트 프로그램 (예 : OpenOffice Calc)이 가져 오기를 수행 할 수 있습니다. 그러면 결과를 데이터베이스로 쉽게 전송할 수 있습니다.


4

향후 참고 자료로 AWK를 가지고 놀기를 원할 수도 있습니다 . 모든 * nix 시스템에 어떤 형태로 존재하는 매우 간단한 작은 스크립팅 언어이며, 유일한 임무는 삶이 표준으로 구분 된 텍스트 데이터베이스를 조작하는 것입니다. 몇 줄의 스크립트를 사용하면 매우 유용한 작업을 수행 할 수 있습니다. 언어는 작고 우아하며 내가 아는 것보다 유틸리티 / 복잡성 비율이 더 좋습니다.


펄은 여러면에서 awk의 후계자입니다.
— reinierpost

awk는 내가 아는 한 인용 및 이스케이프 처리 (예 : 분리 된 CSV 파일의 s 처리)를 처리하지 않습니다. 필요한 경우 전용 CSV 처리 라이브러리를 사용하는 것이 더 쉽습니다. 그들은 많은 언어에 존재합니다.
— reinierpost

0

Go 사용 : https://github.com/chrislusf/gleam

package main

import (
    "flag"
    "os"

    "github.com/chrislusf/gleam"
    "github.com/chrislusf/gleam/source/csv"
)

var (
    aFile = flag.String("a", "a.csv", "first csv file with 2 fields, the first one being the key")
    bFile = flag.String("b", "b.csv", "second csv file with 2 fields, the first one being the key")
)

func main() {

    flag.Parse()

    f := gleam.New()
    a := f.Input(csv.New(*aFile))
    b := f.Input(csv.New(*bFile))

    a.Join(b).Fprintf(os.Stdout, "%s,%s,%s\n").Run()

}

0

CSV Cruncher를 사용해보십시오 .

CSV 파일을 SQL 테이블로 사용하고 SQL 쿼리를 허용하여 다른 CSV 또는 JSON 파일을 생성합니다.

귀하의 경우 다음과 같이 전화하십시오.

crunch -in tableA.csv tableB.csv -out output.csv \
   "SELECT tableA.id, tableA.email, tableB.name 
    FROM tableA LEFT JOIN tableB USING (email)"

이 도구에는 Java 8 이상이 필요합니다.

장점 중 일부 :

  • "데이터가 정확하다고 가정"하는 것이 아니라 실제로 CSV 지원을받을 수 있습니다.
  • 여러 키를 결합 할 수 있습니다.
  • join기반 솔루션 보다 사용하기 쉽고 이해하기 쉽습니다 .
  • 2 개 이상의 CSV 파일을 결합 할 수 있습니다.
  • SQL 표현식으로 조인 할 수 있습니다. 값이 같을 필요는 없습니다.

면책 조항 : 나는 그 도구를 썼습니다. Google 코드가 닫힌 후에는 혼란 스러웠지만 사용하면서 새로운 기능을 추가하고 소생 시켰습니다.


0

LibreOffice와 같은 스프레드 시트 프로그램으로 CSV 파일을 읽고 VLOOKUP()매크로를 사용 하여 두 번째 파일에서 이름을 검색 할 수 있습니다.


7
파일 확장자 xlsx는 Microsoft Excel을 의미하며 VLOOKUP도 마찬가지입니다. 이 질문은 Linux로 태그되었습니다. Linux에서 Microsoft Excel을 사용할 수 있습니까?
— 피터 Mortensen

이제 LibreOffice에는 VLOOKUP 도 있습니다.
— Cristian Ciupitu

-1

https://filerefinery.com 에있는 것과 같은 CSV 파일을 결합하기 위해 특별히 설계된 도구를 사용할 수도 있습니다.

현재 지원되는 작업은 다음과 같습니다. csv 파일 결합. 두 csv 파일에 대해 외부, 내부, 왼쪽 및 오른쪽 조인 작업에 해당하는 SQL을 수행 할 수 있습니다. 각 파일에서 조인 키로 사용될 열을 구성 할 수 있습니다.


링크 된 페이지가 변경되면 답변이 유효하지 않을 수 있으므로 참조 링크에서 답변의 필수 부분을 인용하십시오.
— DavidPostill

더 이상 존재하지 않다.
— Ondra Žižka
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.