3

我有一些格式如下的 csv 文件:

测试1.csv:

    field,port1
    a1,0.2
    a2,0.3
    a3,0.6

测试2.csv:

field,port2
b1,0.5
b2,0.6
b3,0.7
b4,0.1
b5,0.5

测试3.csv:

field, port3
c1,0.1
c2,0.4

等等。我想将这些 csv 合并成一个,所以它看起来像:

field,port1,field,port2,field,port3
a1,0.2,b1,0.5,c1,0.1
a2,0.3,b2,0.6,c2,0.4
a3,0.6,b3,0.7,,
,,b4,0.1,,
,,b5,0.5,,

我怎样才能做到这一点?我 cat >> 但那将是前两列中的所有内容。如果必须的话,我可以这样做,但是像这样的合并可以让我的生活变得更简单。

谢谢

4

2 回答 2

4

paste可以做类似的事情:

$ paste -d, test[1-3].csv
field,port1,field,port2,field, port3
a1,0.2,b1,0.5,c1,0.1
a2,0.3,b2,0.6,c2,0.4
a3,0.6,b3,0.7,
,b4,0.1,
,b5,0.5,

请注意,-d,表示分隔符是逗号。

于 2013-07-24T11:52:32.943 回答
1

基于 fedorqui 的回答:

paste -d: test[1-3].csv | sed -e's/^:/,:/' -e's/::/:,:/g' -e's/::/:,:/g' -e's/:$/:,/' -e's/:/,/g'

(假设您:的文件中没有 - 但您可以选择另一个临时分隔符)

这将恢复您期望的所有逗号。需要一对相同的替换指令,因为另一个替换不考虑替换的字符串。

一般来说:

paste -d'T' file... | sed -e's/^T/ET/' -e's/TT/TET/g' -e's/TT/TET/g' -e's/T$/TE/' -e's/T/S/g'

其中T是临时分隔符(:上面),E是应该替换空行或缺失行的字符串(,上面),并且Spasted 文件的行之间的分隔符(,上面)。临时分隔符T(通用字符串)不能出现在文件和 中E,而最终分隔符S可以。

警告:上面的命令可能需要在你的 shell 中引用的字符串之前有空格

于 2013-07-24T12:18:29.247 回答