すべてのヘッダー/列を共有しないCSVファイルの結合/マージ

すべてのヘッダー/列を共有しないCSVファイルの結合/マージ

データロギングシステムの1000個のファイルを含むディレクトリがあり、各ファイルには最大40,000行以上を含めることができます。問題は、時々1つ以上のセンサーからデータが記録されず、失われることです。

ファイル1:

A,B,C,D,F

10,20,10,20,5

ファイル2:

B,C,D,E,F

20,10,20,5,10

ファイル3:

D,E,F


10,30,20

必要な結果は、すべてのファイルを1つのヘッダーにマージ/接続することです。入力ファイルに列がない場合(破損したセンサーのため)、そのセクションはNULL値に置き換えられます。

A,B,C,D,E,F

10,20,10,20,,5

,20,10,20,5,10

,,,10,30,20

最後の列Fは日付/時刻スタンプなので、常に存在します。

この答えを見つけましたが、すべてのヘッダー/列がすべてのファイルで同じであるとします。

ヘッダーの順序が異なる複数の大きなCSVファイルを貼り付ける

私もこの問題を発見しました複数のCSVファイルをマージして、一致する列と一致しない列を取得します。しかし、私が利用できるほど答えは完全ではありません。

ありがとう

ベストアンサー1

非常にきれいでシンプルな代替ツールを試してみたい場合(https://github.com/johnkerl/miller)、入力CSVファイルを含むフォルダから始めて、このコマンドを使用します。

mlr --csv unsparsify *.csv >out.csv

あなたはやる

A,B,C,D,F,E
10,20,10,20,5,
,20,10,20,10,5
,,,10,20,30

F a を終了するには、次のコマンドを使用します。

mlr --csv unsparsify then reorder -e -f F *.csv

ファイルが多い場合は、次の2つの手順で実行できます。

mlr --icsv cat *.csv >tmp.txt
mlr --ocsv unsparsify tmp.txt >out.csv

おすすめ記事