我有一个包含来自数据记录系统的 1000 个文件的目录,每个文件可以有多达 40,000 行或更多行。挑战在于,有时数据并未从一个或多个传感器记录下来,因此会丢失,例如
文件1:
A,B,C,D,F
10,20,10,20,5
Run Code Online (Sandbox Code Playgroud)
文件2:
B,C,D,E,F
20,10,20,5,10
Run Code Online (Sandbox Code Playgroud)
文件3:
D,E,F
10,30,20
Run Code Online (Sandbox Code Playgroud)
所需的结果将所有文件合并/加入单个标题。如果输入文件缺少一列(因为传感器损坏),该部分将替换为空值
A,B,C,D,E,F
10,20,10,20,,5
,20,10,20,5,10
,,,10,30,20
Run Code Online (Sandbox Code Playgroud)
最后一列 F 始终存在,因为那是日期/时间戳。
我找到了这个答案,但是它假设所有文件的所有标题/列都相同
我还发现了这个问题Merging multiple CSV files for matching and non matching columns但答案不够完整,我无法使用它。
谢谢
如果您想尝试替代且非常干净且简单的工具(https://github.com/johnkerl/miller),请从您输入 CSV 文件的文件夹开始,使用此命令
mlr --csv unsparsify *.csv >out.csv
Run Code Online (Sandbox Code Playgroud)
你将会有
A,B,C,D,F,E
10,20,10,20,5,
,20,10,20,10,5
,,,10,20,30
Run Code Online (Sandbox Code Playgroud)
如果你想让 F a 结束,命令是
mlr --csv unsparsify then reorder -e -f F *.csv
Run Code Online (Sandbox Code Playgroud)
如果你有很多文件,你可以分两步完成:
mlr --icsv cat *.csv >tmp.txt
mlr --ocsv unsparsify tmp.txt >out.csv
Run Code Online (Sandbox Code Playgroud)