我正在使用awk脚本解析bash中的csv。价值观与报价在$ 2“awk中的CSV格式替换引号
"1";"2";"3"
里面像
"1";"2"2";"3"
,我需要翻译成"1";"22";"3"
如何删除这些值有时候,我也没能逃脱引号”?首先我尝试检查$ 2,如果它里面有引号,但我卡住了。如果我使用gsub,它会从$ 2中删除所有报价,我会得到"1";22;"3"
。我想过在gensub中使用gsub,但没有找到如何将函数传递给第二个参数的gensub。
cat test | awk 'BEGIN {OFS=FS=";"} \ {if ($2 ~ /^\".*.[\"].*\"$/) {$2 = "need help here")} \ print}'
**************** UPDATE ****************
也许有另一种方法对此。 awk中是否有任何特殊选项不仅设置了分隔符,而且还为分隔值设置了引号?这将是真棒,如果$ 1等不能作为“价值”,但作为价值本身,引号里的
修复CSV生成器代码,使其不会生成格式不正确的CSV数据。踢,尖叫,叫喊,霍勒 - 在紧急情况下,提供给他们修复它 - 但做一些事情,以便修复拙劣的文件是没有必要的。显然,在短期内(一次性),你必须破解数据,但你不应该这样做,而且任何超过一次性的内容都是不可接受的。如果报价是嵌入式的,它们应该加倍:'“1”;“2”“2”;“3”'是有效的CSV,其中中间字段的值为'2“2'当未加引号时 –
@JonathanLeffler谢谢但abnf说这个值是'word','word'可以包含'DQUOTE',所以我唯一能做的就是把引号改成“to”或者其他的东西,但是这会给我带来很大的痛苦,因为我需要重新配置我的生产环境,这并不容易。所以首先我需要考虑临时解决方法。 – ky4k0b
你指的是哪个ABNF? –