3

次のような形式の csv ファイルがいくつかあります。

test1.csv:

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

test2.csv:

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

test3.csv:

field, port3
c1,0.1
c2,0.4

これらの csv を 1 つにマージして、次のようにします。

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,,

これどうやってするの?私は猫 >> しかし、それは最初の 2 つの列のすべてです。必要に応じてそのようにすることもできますが、このようなマージを行うことで、私の人生はずっと簡単になります。

ありがとう

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は空行または欠落行を置換する文字列 (,上記)、はd ファイルSの行間の区切り文字(上記) です。一時的な区切り記号(一般的な文字列) は、ファイルと では使用できませんが、最後の区切り文字は使用できます。paste,TES

警告: 上記のコマンドでは、シェルで引用符で囲まれた文字列の前にスペースが必要になる場合があります

于 2013-07-24T12:18:29.247 に答える