将单个csv文件的前两列合并到另一列中

时间:2018-03-09 09:22:54

标签: linux shell csv awk sed

所以我有一个大的CSV文件(在Gb中),我有多个列,前两列是:

 Invoice number|Line Item Number

我想要一个unix / linux / ubuntu命令,它可以合并这两列并创建一个由分隔符':'分隔的新列,所以例如:如果发票号是64789544,行项目号是234533,那么我的合并值应为

 64789544:234533

是否真的可以实现,如果是,可以将合并列添加回源csv文件。

2 个答案:

答案 0 :(得分:0)

您可以使用以下sed命令:

$ cat large.csv 
Invoice number|Line Item Number|Other1|Other2
64789544|234533|abc|134
64744123|232523|cde|awc

$ sed -i.bak 's/^\([^|]*\)|\([^|]*\)/\1:\2/' large.csv

$ cat large.csv                                                                                       
Invoice number:Line Item Number|Other1|Other2
64789544:234533|abc|134
64744123:232523|cde|awc

请注意,它会备份您的输入文件以防万一,因此您需要在文件系统中留出足够的空间。

<强>说明:

  • s/^\([^|]*\)|\([^|]*\)/\1:\2/此命令将替换由|分隔的CSV的前两个字段,并将:使用后引用替换分隔符,这将合并2列。

如果您确定自己在做什么,可以更改-i.bak中的-i以避免备份CSV文件。

答案 1 :(得分:0)

也许这个简单的sed

sed 's/|/:/' infile
相关问题