从双引号csv字段中去掉可变数量的逗号

dzhpxtsq  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(295)

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

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

但如果字段中有两个逗号,只有一个逗号被去掉:
aloha,inc.,一家公寓协会
变成
aloha,inc.公寓协会
或者,如果有人能向我解释为什么在将csv加载到mysql时,我不能使用“optional enclosed by”选项,这将使生活变得简单得多(我一直在尝试使用sed去掉逗号,因为逗号会破坏我的列数据,即使我使用可选的封闭选项,并且我的字段是双引号)。excel导出时仅在带逗号的字段周围加引号。如果每样东西都是双引号,我没有问题,但有选择性地引用,我开始把我的鞋撞在table上。
更新:文件包含多个字段。
“aloha,inc.,一家公寓协会”,900,venice,fl,34293-5112,venice,fl,34285,aloha
我甚至担心可能有行有多个引用字段,这似乎是一个严重的问题。但据我所知,这并不常见。
有一件事我只是在想,我可以消除所有的例子,'公司',但这不会消除其他的例子,如'有限责任公司',等等。
我要删除字段中的所有逗号。
我担心这样的情况:
“aloha,inc.,公寓协会”,900,venice,fl,34293-5112,venice,fl,34285,“aloha,inc.,公寓协会”
阿罗哈的第一个示例和最后一个示例之间的逗号不是用

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

wljmcqd81#

如果要删除 "" 那么下面的内容可能会对你有所帮助。

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

使用 sed -i 选项,以防您要将输出保存到输入文件本身。

9ceoxa92

9ceoxa922#

你可以用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='"[^"]*"|[^,]*'` 将输入字段定义为双引号字段,或用逗号分隔的字段
看到了吗https://www.gnu.org/software/gawk/manual/html_node/fixed-width-data.html 有关详细信息 `-v OFS=,` 逗号作为输出字段分隔符 `for(i=1; i<=NF; i++)` 循环所有输入字段 `gsub(/,/, "", $i)` 删除所有逗号 `1` 打印的内容 `$0` 如果 `gawk` 不可用,可以使用

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

注意:如果字段包含双引号、换行符等,则此操作无效。请使用 `csv` 提供的解析器 `perl` ,  `python` 等等

相关问题