如何编写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 ,, VENICE,FL,34285,ALOHA
我甚至担心可能会有多个引用字段的行,这似乎是一个严重的问题。据我所知,这并不常见。
我想到的一件事是我可以消除',INC'的所有实例,但这不会消除其他例子,例如',LLC'等。
我想删除字段中的所有逗号。
我担心如下情况:
“ALOHA,INC。,CONDOMINIUM ASSOCIATION”,900,VENICE,FL,34293-5112 ,, VENICE,FL,34285,“ALOHA,Inc.,A CONDOMINIUM ASSOCIATION”
Aloha的第一个实例与最后一个实例之间的逗号不会被
删除sed 's/"\([^"]*\),\([^"]*\)"/\1\2/g' file > file2
答案 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"
-v FPAT='"[^"]*"|[^,]*'
将输入字段定义为双引号字段,或用逗号分隔的字段
-v OFS=,
逗号作为输出字段分隔符for(i=1; i<=NF; i++)
遍历所有输入字段
gsub(/,/, "", $i)
删除所有逗号1
打印$0
如果gawk
不可用,您可以使用
perl -pe 's/"[^"]+"/$&=~tr|,||dr/ge' ip.txt
注意:如果字段包含双引号,换行符等,则无效。请使用csv
,perl
等中提供的python
解析器