2つのCSVファイルがあります。そのうちの1つには多くのデータが含まれています。
メイン.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.
出力に 2 回表示したいので、オプションを使用してフィールド-o
(最初の入力ファイルの場合はフィールド 1-4、2 番目のファイルの場合はフィールド 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-ツール