두 개의 CSV 파일이 있습니다. 그 중 하나에는 많은 데이터가 포함되어 있습니다.
메인.csv
Order No.,invoiceNumber,invoiceAmount,invoiceAmountNet
20001,20010,500,5
20002,20011,400,4
20003,20012,300,3
20004,20013,200,2
20005,20014,200,1
다른 CSV 파일에는 정보가 더 적습니다.
2020년 10월.csv
Order No.,Timestamp,ID
20001,2020-10-01 12:00:00,123456
20002,2020-10-02 13:00:00,123457
내 목표는 October-2020.csv를 기반으로 새 CSV 파일을 만들고 main.csv의 정보를 추가하는 것입니다. 공통 정보는 주문 번호입니다.
출력.csv
Order No.,invoiceNumber,invoiceAmount,invoiceAmountNet,Order No.,Timestamp,ID
20001,20010,500,5,20001,2020-10-01 12:00:00,123456
20002,20011,400,4,20002,2020-10-02 13:00:00,123457
이것이 어떻게 스크립트로 작성될 수 있습니까? 도움을 주시면 감사하겠습니다.
답변1
두 파일의 join
첫 번째 필드( )에서 필드 구분 기호로 사용 :Order No.
,
join -t, -o1.1,1.2,1.3,1.4,2.1,2.2,2.3 main.csv october-2020.csv > output.csv
그리고
$ cat output.csv
Order No.,invoiceNumber,invoiceAmount,invoiceAmountNet,Order No.,Timestamp,ID
20001,20010,500,5,20001,2020-10-01 12:00:00,123456
20002,20011,400,4,20002,2020-10-02 13:00:00,123457
두 파일 모두 첫 번째 필드에서 이미 정렬되어 있으므로 수동으로 정렬할 필요가 없습니다. Order No.
출력에 두 번 표시되기를 원하므로 옵션을 사용하여 필드 -o
(첫 번째 입력 파일의 경우 필드 1-4, 두 번째 파일의 경우 필드 1-3)를 지정합니다.
답변2
csv-sqlite -i main.csv -i october-2020.csv \
'select i1.invoiceNumber, i1.invoiceAmount, i1.invoiceAmountNet, i2.*
from input1 i1, input2 i2
where i1."Order No." = i2."Order No."' | csv-header --remove-types
csv-sqlite의csv-nix-도구