我如何编写sed脚本(或awk,只是不熟悉它)来从双引号csv字段的内部插入逗号?我可以使用以下sed一行删除一个逗号:
sed 's/"\([^"]*\),\([^"]*\)"/\1\2/g' file > file2
但是,如果我在字段中有两个逗号,那么只去掉一个逗号:
ALOHA公司,共管公寓协会
变成了
ALOHA公司共管公寓协会
或者,如果有人能向我解释,为什么在将csv加载到mysql时,我似乎无法获得“可选的”选项来工作,那将使生活变得非常容易(我一直试图使用sed来删除逗号,因为即使我使用可选的括起来的选项,而且我的字段被双引用时,逗号也会破坏我的柱状数据。Excel导出的引号只在字段周围加上逗号。如果所有内容都是双引号,那么我就没有问题,但有选择性地引用),我就开始在桌子上敲鞋了。
更新:文件包含多个字段。
"ALOHA公司,共管公寓协会“,900,威尼斯,FL,34293-5112,威尼斯,FL,34285,ALOHA
我甚至担心可能有多个引用字段的行,这似乎是一个严重的问题。但据我所知,这并不常见。
有一件事我只是想,我可以消除所有的例子',公司',但这不会消除其他的例子,如‘,LLC',等等。
我想从一个字段中删除所有逗号。
我担心的是这样的情况:
ALOHA公司,共管公寓协会,900,威尼斯,FL,34293-5112,威尼斯,FL,34285,"ALOHA,INC.,A condom居协会“
Aloha的第一个实例和最后一个实例之间的逗号不是用
sed 's/"\([^"]*\),\([^"]*\)"/\1\2/g' file > file2
发布于 2018-05-16 02:07:24
在这种情况下,可以使用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
等)。
发布于 2018-05-15 16:09:57
如果您希望删除"
到"
之间的所有逗号,那么以下操作可能会对您有所帮助。
sed '/".*"/s/,//g' Input_file
如果希望将输出保存到Input_file本身,请使用Input_file选项。
https://stackoverflow.com/questions/50354685
复制相似问题