Awk gsub将一个报价替换为零

Awk gsub将一个报价替换为零,awk,gsub,Awk,Gsub,输入: aaaa, bbbb, ccc, "dddd, ddd1", eee eee, "fff, ggg, hhh aaaa, bbbb, ccc, "dddd, ddd1", eee eee, fff, ggg, hhh 输出: aaaa, bbbb, ccc, "dddd, ddd1", eee eee, "fff, ggg, hhh aaaa, bbbb, ccc, "dddd, ddd1", eee eee, fff, ggg, hhh 我认为gsub应该这样做,但是如何告诉你

输入

aaaa, bbbb, ccc, "dddd, ddd1", eee
eee, "fff, ggg, hhh
aaaa, bbbb, ccc, "dddd, ddd1", eee
eee, fff, ggg, hhh
输出

aaaa, bbbb, ccc, "dddd, ddd1", eee
eee, "fff, ggg, hhh
aaaa, bbbb, ccc, "dddd, ddd1", eee
eee, fff, ggg, hhh

我认为gsub应该这样做,但是如何告诉你替换“white only than,if”是所有行中唯一的一次(有时会发生错误)。

你可以尝试下面的awk命令

$ awk '/^[^"]*"[^"]*$/{sub(/"/,"")}1' file
aaaa, bbbb, ccc, "dddd, ddd1", eee
eee, fff, ggg, hhh
搜索模式
^[^”]*“[^”]*$
与正好有一个
引号的行匹配。删除该行上的双引号将获得所需的结果
sub
功能足以从一行中删除一个字符。

这应该可以:

awk -F'"' 'NF==2{sub(/"/,"")}7' file

如果有三句话呢?@Jidder OP只问了一次。上面的一行是OP问题的解决方案。如果它有3个引号,那么解决方案对它不起作用。@Jidder我不明白,对不起。如果一行中有三个,为什么我的命令会删除
”?如果有3个
”,
NF==2
,那么
false
,或者我错了?哦,是的,对不起,我的错了,我说的是先删除单引号,然后我用错误的想法返回到注释,如果有3个,也可以使用
awk-F''nfi““那么也应该删除一个”。如果是五个,则同时删除一个引号。从何处(从哪个位置)删除一个引号?