首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >双引号csv字段中的带可变逗号

双引号csv字段中的带可变逗号
EN

Stack Overflow用户
提问于 2018-05-15 16:04:28
回答 2查看 75关注 0票数 0

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

代码语言:javascript
运行
复制
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的第一个实例和最后一个实例之间的逗号不是用

代码语言:javascript
运行
复制
sed 's/"\([^"]*\),\([^"]*\)"/\1\2/g' file > file2
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-16 02:07:24

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

代码语言:javascript
运行
复制
$ 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不可用,则可以使用

代码语言:javascript
运行
复制
perl -pe 's/"[^"]+"/$&=~tr|,||dr/ge' ip.txt

注意:如果字段中包含双引号、换行符等,这将无法工作。请使用csv解析器( perlpython等)。

票数 1
EN

Stack Overflow用户

发布于 2018-05-15 16:09:57

如果您希望删除""之间的所有逗号,那么以下操作可能会对您有所帮助。

代码语言:javascript
运行
复制
sed '/".*"/s/,//g'   Input_file

如果希望将输出保存到Input_file本身,请使用Input_file选项。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50354685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档