Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 将单个csv文件的前两列合并到另一列中_Linux_Shell_Csv_Awk_Sed - Fatal编程技术网

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

Linux 将单个csv文件的前两列合并到另一列中,linux,shell,csv,awk,sed,Linux,Shell,Csv,Awk,Sed,因此,我有一个大型CSV文件(Gb),其中有多个列,前两列是: Invoice number|Line Item Number 我需要一个unix/linux/ubuntu命令,该命令可以合并这两列,并创建一个新列,该列由分隔符“:”分隔,因此对于例如:如果发票号为64789544,行项目号为234533,则我的合并值应为 64789544:234533 真的可以实现吗?如果可以,则可以将合并列添加回源csv文件。您可以使用以下sed命令: $ cat large.csv Invoic

因此,我有一个大型CSV文件(Gb),其中有多个列,前两列是:

 Invoice number|Line Item Number
我需要一个unix/linux/ubuntu命令,该命令可以合并这两列,并创建一个新列,该列由分隔符“:”分隔,因此对于例如:如果发票号为64789544,行项目号为234533,则我的合并值应为

 64789544:234533

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

您可以使用以下
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/^\([^ |]*\)\124\([^ |]*\)/\ 1:\2/
    此命令将替换CSV的前两个字段,用
    分隔,并将分隔符替换为
    使用反向引用合并两列

如果您确定正在执行的操作,可以在
-i
中更改
-i.bak
,以避免备份CSV文件

也许用这个简单的sed

sed 's/|/:/' infile

谢谢你的回答让我找到了更好的地方。很少有东西,而不是“|”我有“,”,所以我用“,”取代了你的命令。我希望我是对的。其次,是否有任何方法可以保持列的原样,并将合并的值视为一个新列。@chandresh\u cool:对于逗号分隔符,请使用
s/^\([^,]*\),\([^,]*\)/\1:\2/
,然后还可以通过使用
s/^\([^ 124;]*\)\([^ 124;]*\)/\ 1:\2/
(我在这里使用
作为分隔符来实现第二个目标. 我还建议您在使用大文件之前在一些小文件上测试它。对于第二个任务,我尝试了这个;sed-i.bak s/^([^,]*),([^,]*)/\1:\2、\1、\2/test.csv,但它不起作用。是的,将FS=“|”替换为FS=“,”显然:)感谢Allan…这很有效。我会接受你的回答。我在评论中回答了你的补充问题!让我知道它是否如您所期望的那样工作:)如果它对您有帮助,您可以投票支持/接受我的回答Stack Overflow不是代码编写服务。请出示你的密码。由于堆栈溢出对您隐藏了关闭原因:寻求调试帮助的问题(“为什么此代码不工作?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:。