Bash

根據匹配的第一列(帶標題)合併兩個 CSV

  • January 9, 2021

我有兩個 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

這怎麼可能是腳本?我很感激任何幫助。

在兩個文件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)。

引用自:https://unix.stackexchange.com/questions/613612