删除csv[awk,sed]中未删除列中的逗号
有没有一种简单的方法可以删除csv中使用AWK/SED不应该存在的逗号 .csv由5列组成,但额外的逗号使某些行出现6列。例如,请参见下面的第三列,我希望第三列是数字,但您可以看到第3行和第4行是字符串删除csv[awk,sed]中未删除列中的逗号,awk,sed,Awk,Sed,有没有一种简单的方法可以删除csv中使用AWK/SED不应该存在的逗号 .csv由5列组成,但额外的逗号使某些行出现6列。例如,请参见下面的第三列,我希望第三列是数字,但您可以看到第3行和第4行是字符串 4,abc,323,123,acvd 4,abc,323,123,acvd 4,ab,c,323,123,acvd 4,db,c,323,123,acvd 我不想过度设计我可能会使用pandas/python的解决方案 它也是一个非常大的5GB文件,超过百万行,所以我无法在excel中打开它
4,abc,323,123,acvd
4,abc,323,123,acvd
4,ab,c,323,123,acvd
4,db,c,323,123,acvd
我不想过度设计我可能会使用pandas/python的解决方案
它也是一个非常大的5GB文件,超过百万行,所以我无法在excel中打开它
期望的输出是添加或删除添加字符串,即
4,abc,323,123,acvd
4,abc,323,123,acvd
4,abc,323,123,acvd
4,dbc,323,123,acvd
4,abc,323,123,acvd
4,abc,323,123,acvd
4,ab,323,123,acvd
4,db,323,123,acvd
使用以下Perl一行程序:
perl -F',' -lane 'if ( @F > 5 ) { $_ = join ",", $F[0], "$F[1]$F[2]", @F[3..$#F]; } print;' in_file
输出:
4,abc,323,123,acvd
4,abc,323,123,acvd
4,abc,323,123,acvd
4,dbc,323,123,acvd
Perl one liner使用以下命令行标志:
-e:告诉Perl在线查找代码,而不是在文件中。
-n:一次循环输入一行,默认情况下将其分配给$。
-l:在行内执行代码之前,默认情况下在*NIX上去掉\n输入行分隔符,并在打印时附加它。
-a:将$拆分为空格上的数组@F或-F选项中指定的正则表达式上的数组@F。
-F',':按逗号而不是空格拆分为@F
另见:
这个简单的awk脚本也可以完成您的工作:
awk'BEGIN{FS=OFS=,}NF==6{$2=$2$3;$3=;sub/,/,}1'file.csv
美国广播公司,323123,acvd
美国广播公司,323123,acvd
美国广播公司,323123,acvd
4,dbc,323123,acvd
由于删除额外字段是您可以接受的选项:
$ awk 'BEGIN{FS=OFS=","} {print $1, $2, $(NF-2), $(NF-1), $NF}' file
4,abc,323,123,acvd
4,abc,323,123,acvd
4,ab,323,123,acvd
4,db,323,123,acvd
否则:
$ awk 'BEGIN{FS=OFS=","} {print $1, $2 (NF>5 ? $3 : ""), $(NF-2), $(NF-1), $NF}' file
4,abc,323,123,acvd
4,abc,323,123,acvd
4,abc,323,123,acvd
4,dbc,323,123,acvd
在本例中,哪个逗号是“额外的”?第3行和第4行应该解释为什么?欢迎使用堆栈溢出。请在问题中添加您自己的代码。你至少要展示你自己为解决这个问题所做的大量研究。完美作品——也会让读者阅读