awk FPAT变量:工作

时间:2013-10-15 10:29:00

标签: regex awk gawk

我能够从GNU page of GAWK了解到它可以使用FPAT变量处理数据中的分隔符,但我无法理解其工作原理。对于CSV文件,FPAT值为:

FPAT = "([^,]+)|(\"[^\"]+\")"

使用数据:

abc,"pqr,mno"

第一个分组表达式评估所有内容,即不是逗号,这应该是"abc"作为数据,然后第一次出现逗号时失败。现在我的问题是接下来会发生什么?由于第一个分组表达式失败,regexp将继续使用或条件逗号之后的字符?但第一个分组表达式继续对逗号后的所有数据有效,因此可能需要"pqr作为下一个数据?

1 个答案:

答案 0 :(得分:6)

因此,字段模式描述如下。

不包含逗号的字符串,其中字符串长度大于零(不匹配空字符串)

[^,]+

或者以双引号开头和结尾的字符串,并且至少包含一个不是双引号的字符(为了便于阅读而省略反斜杠)

"[^"]+"      

正则表达式引擎从字符串的开头匹配,并尝试在给定模式的情况下尽可能匹配。

abc,"pqr,mno" 

因此,abc是字符串开头的任一模式匹配的最长字符串,因此变为$1。下一个字符,无法与任何一种模式匹配,因此正则表达式引擎只会移动到下一个字符",其开头与第二个模式匹配。这匹配到行尾为"pqr,mno"是一个以双引号开头和结尾的字符串,并且至少包含一个非双引号字符。因此"pqr,mno"成为记录$2的{​​{1}}。