如何在引号内转义多个引号和逗号?

时间:2016-10-19 20:01:26

标签: regex bash csv awk sed

如何使用awk正确转义多个引号和逗号,以分隔引号括起的csv字段?以下示例应该更清楚:

有:

mike,3
"first, second",6 
"height 6""7""", good","4, 5"

想要(以[]标记的所需分隔):

[mike] [3]
["first, second"] [6] 
["height 6""7""", good"] ["4, 5"]

没有运气试试GNU awk with the FPAT variable

gawk -vFPAT="([^,]+)|(\"[^\"]+\")" '{print $1}' my_file.csv
mike
"first, second"
"height 6""7""" # note the missing ", good"

Excel和/或LibraOffice可以正确解析此csv而不会打嗝。必须有办法解析它。非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

这应该有用......

$ awk -v FPAT='[^,]+|"[^"]+"|"([^"]*""+[^"]*)+"' ...

但是,我认为需要折叠多个引号。

行动中

$ awk -v FPAT='[^,]+|"[^"]+"|"([^"]*""+[^"]*)+"' -v OFS='> <' '{print "<"$1,$2">"}' file

<mike> <3>
<"first, second"> <6>
<"height 6""7""", good"> <"4, 5">