【发布时间】:2018-10-25 13:15:01
【问题描述】:
如何编写 sed 脚本(或 awk,只是不熟悉它)从双引号 csv 字段的内部删除逗号?我可以使用以下 sed one-liner 删除单个逗号:
sed 's/"\([^"]*\),\([^"]*\)"/\1\2/g' file > file2
但如果我在字段中有两个逗号,则只去掉一个逗号:
“ALOHA, INC., A CONDOMINIUM ASSOCIATION”
变成
“ALOHA, INC. A CONDOMINIUM ASSOCIATION”
或者,如果有人可以向我解释为什么在将 csv 加载到 mysql 时,我似乎无法获得“可选地被封闭”选项,那会让生活变得更轻松(我已经一直在尝试使用 sed 去除逗号,因为即使我使用可选包含的选项并且我的字段被双引号引起来,逗号也会破坏我的列数据。Excel 仅在带逗号的字段周围使用引号导出。如果所有内容都是双引号,我不会没问题,但有选择性地引用,我开始在桌子上敲我的鞋子。
更新:该文件包含多个字段。
“ALOHA, INC., A CONDOMINIUM ASSOCIATION”, 900, VENICE, FL, 34293-5112,,VENICE,FL,34285,ALOHA
我什至担心可能存在包含多个引用字段的行,这似乎是一个严重的问题。不过据我所知,这并不常见。
我刚才在想的一件事是我可以消除“,INC”的所有实例,但这不会消除其他例子,例如“,LLC”等。
我想删除字段中的所有逗号。
我担心以下情况:
“ALOHA, INC., A CONDOMINIUM ASSOCIATION”, 900, VENICE, FL, 34293-5112,,VENICE,FL,34285,”ALOHA, Inc., A CONDOMINIUM ASSOCIATION”
Aloha 的第一个实例和最后一个实例之间的逗号不会用
消除吗sed 's/"\([^"]*\),\([^"]*\)"/\1\2/g' file > file2
【问题讨论】:
-
试试
sed '/"[^"]*"/s/,//g' file > file2 -
@malan,您的线路是只有一个字段还是多个字段?提供一个反映您真实用例的示例很重要.. 或者假设一行中只有一个双引号字段,您可能会得到答案..
-
另外,您能否澄清一下应该如何处理带有 1 个逗号、3 个逗号、4 个逗号等的双引号字段...您给定的示例适用于您想要的带有 2 个逗号的字段删除第二个逗号..
-
Sundeep:如果一行中有 2 个双引号字段,它会消除分隔逗号的字段吗?我正在考虑基于 sed 和正则表达式。
-
要保留双引号还是去掉它们?