2016-08-05 54 views
1

我需要从CSV日志文件中替换额外的双引号(字段用逗号分隔并用双引号括起来)。替换必须仅影响CSV的最后一个字段。通过bash在单个CSV字段中替换多余的双引号

输入日志文件例如:

"24-12-2015","23:07:08","00","01","00","00","START","00","END","JS786JGDG7899JSGJHG"dsdajasghsahd" 

预期输出:

"24-12-2015","23:07:08","00","01","00","00","START","00","END","JS786JGDG7899JSGJHG''dsdajasghsahd" 

我需要完成在bash或蟒蛇此任务。

+0

你应该描述你到目前为止试过的东西,以获得一些帮助。 –

+0

为什么同时使用'python'和'bash'标签? – anubhava

+1

这是我的第一篇文章,我使用了建议的标签。 – Fantaghost

回答

1

您可以使用AWK:

awk "{gsub(/'/, \"''\", \$NF)} 1" file.csv 

"24-12-2015","23:07:08","00","01","00","00","START","00","END","JS786JGDG7899JSGJHG''dsdajasghsahd" 
+1

你是那个绝望的点... – 123

+1

你是认真的吗?由于我跨越了每日限制,大多数这些代表甚至没有计算在内。很多时候问题可能对专家来说显得微不足道,但对于海报来说并不那么简单。 – anubhava

+1

这不是微不足道的,问题很糟糕,它只是要求代码,甚至没有意义。 – 123

0

试试这个;

awk -F, -v OFS="," '{gsub(/\"/,"\47\47",$NF)gsub(/^\47\47/,"\"",$NF);gsub(/\047\047$/,"\"",$NF) }1' file 

"24-12-2015","23:07:08","00","01","00","00","START","00","END","JS786JGDG7899JSGJHG''dsdajasghsahd" 
+0

它适用于用作示例的单行,但在针对整个日志运行时,它也会替换用作字段终止符的最后一个双引号。该行的结尾从“\ r \ n”转换为“\ r \ n” – Fantaghost