从双引号csv字段中删除可变数量的逗号

时间:2018-05-15 16:04:28

标签: mysql regex csv sed

如何编写sed脚本(或awk,只是不熟悉它)来限制双引号csv字段内部的逗号?我可以使用以下sed one-liner删除一个逗号:

sed 's/"\([^"]*\),\([^"]*\)"/\1\2/g' file > file2

但如果我在该字段中有两个逗号,则只删除一个逗号:

  

“ALOHA,INC。,CONDOMINIUM ASSOCIATION”

变为

  

“ALOHA,INC。CONDOMINIUM ASSOCIATION”

或者,如果有人可以向我解释为什么我在将csv加载到mysql时似乎无法获得'OPTIONALLY ENCLOSED BY'''选项,那将使生活变得更加容易(我已经我一直试图使用sed来删除逗号,因为逗号会破坏我的柱状数据,即使我使用可选的封闭选项并且我的字段是双引号.Excel仅使用逗号引用带引号。如果所有内容都是双引号,我不会有问题,但有选择地引用,我开始在桌子上敲我的鞋子。

更新:该文件包含多个字段。

  

“ALOHA,INC。,CONDOMINIUM ASSOCIATION”,900,VENICE,FL,34293-5112 ,, VE​​NICE,FL,34285,ALOHA

我甚至担心可能会有多个引用字段的行,这似乎是一个严重的问题。据我所知,这并不常见。

我想到的一件事是我可以消除',INC'的所有实例,但这不会消除其他例子,例如',LLC'等。

我想删除字段中的所有逗号。

我担心如下情况:

  

“ALOHA,INC。,CONDOMINIUM ASSOCIATION”,900,VENICE,FL,34293-5112 ,, VE​​NICE,FL,34285,“ALOHA,Inc.,A CONDOMINIUM ASSOCIATION”

Aloha的第一个实例与最后一个实例之间的逗号不会被

删除
sed 's/"\([^"]*\),\([^"]*\)"/\1\2/g' file > file2

2 个答案:

答案 0 :(得分:2)

如果您要删除""之间出现的所有逗号,则以下内容可能对您有所帮助。

sed '/".*"/s/,//g'   Input_file

如果要将输出保存到Input_file本身,请使用sed -i选项。

答案 1 :(得分:1)

您可以在这种情况下使用GNU awk

$ gawk -v FPAT='"[^"]*"|[^,]*' -v OFS=, '{for(i=1; i<=NF; i++) gsub(/,/, "", $i)} 1' ip.txt
"ALOHA INC. A CONDOMINIUM ASSOCIATION", 900, VENICE, FL, 34293-5112,,VENICE,FL,34285,"ALOHA Inc. A CONDOMINIUM ASSOCIATION"

如果gawk不可用,您可以使用

perl -pe 's/"[^"]+"/$&=~tr|,||dr/ge' ip.txt

注意:如果字段包含双引号,换行符等,则无效。请使用csvperl等中提供的python解析器