我正在尝试将多个 csv 文件合并为一个大文件。所有这些文件都有不同的列长度,其他文件只有标题(没有数据)。当我使用
paste -d "," file1.csv file2.csv file3.csv file4.csv file5.csv file6.csv > output.csv
最终的 csv 时,它看起来像这样
来自 cgi_si2 的数据应位于 cgi_sii 上,而来自 cgi_sii 的数据应位于不同的列上。 file1.csv 的范围从 subjectkey 到 cgi_si,file2.csv 只是 cgi_si2,但只有标题 ( cat file2.csv cgi_si2
),file3.csv 有 cgi_sii 和数据编号(只有一列),file4.csv 有所有其他标题,但没有数据,file5 .csv 有标题和数据(一列),而 file6.csv 是更多标题,没有数据 ( cat file6.csv cgi_efficacy_se,trt_grp,days_baseline,etc....
)。
我尝试过管道| sed 's/^,//; s/,$//'> output.csv
但没有成功。任何建议将不胜感激。谢谢!
答案1
这是一个例子。你有这种类型的输入文件。它们有不同的标题,并且您还有一个没有任何内容的文件。
cat input_01.csv
subjectjey,cgi_si
a,2
b,3
cat input_02.csv
cgi_si2,cgi_sii
4,10
9,18
cat input_03.csv
cgi_si2
cat input_04.csv
cgi_sii
8
9
使用伟大的磨坊主和跑步
mlr --csv rename -r '"cgi_si[0-9]+",cgi_si' then rename '"cgi_sii.+",cgi_sii' then unsparsify input_0*.csv
你将会拥有
+------------+--------+---------+
| subjectjey | cgi_si | cgi_sii |
+------------+--------+---------+
| a | 2 | |
| b | 3 | |
| | 4 | 10 |
| | 9 | 18 |
| | | 8 |
| | | 9 |
+------------+--------+---------+
我使用重命名和正则表达式来重命名一些字段,然后合并所有字段。
答案2
完成任务的最简单方法是手动。打开 Excel/Calc,在 Excel(或文本编辑器)中逐个打开每个 .csv,然后从一个文件复制粘贴到另一个文件中。
要自动执行此操作,您必须进行全面的编程。