合并多个 csv 文件而不将数据向左移动

合并多个 csv 文件而不将数据向左移动

我正在尝试将多个 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,然后从一个文件复制粘贴到另一个文件中。

要自动执行此操作,您必须进行全面的编程。

相关内容