我想要以下形式的句柄字符串:
PREFIX_TYPE_N,DATA
那么,*awk(gawk,mawk,nawk)是否支持在已匹配字符串的操作中包含模式匹配?像这样的东西(当然,对我不起作用):
*awk 'BEGIN { FS="," }
/PREFIX/ {
/TYPE_1/ {printf "[TYPE1] [DATA: $2]"} // <-- included pattern
/TYPE_2/ {printf "[TYPE2] [DATA: $2]"} // <-- another included pattern
... // <-- some more included patterns
}' "filename"
还是我仍然需要if/else或switch/case?
不是这样,但非常接近,因为有一个正则表达式匹配运算符(~):
BEGIN { FS="," }
/PREFIX/ {
if ($1 ~ "TYPE_1") {printf "[TYPE1] [DATA: $2]"} // <-- included pattern
if ($1 ~ "TYPE_2") {printf "[TYPE2] [DATA: $2]"} // <-- another included pattern
... // <-- some more included patterns
}
请注意,因为第一个模式匹配将只处理一行就已经进入其块,所以在块中只处理if是可以的。
如果你真的想要图案的易读性,你可以这样做:
BEGIN { FS="," }
/PREFIX/ { //stuff to do for all prefixes, before specific handling
data = $2 }
/PREFIX_TYPE_1/ { type = "TYPE_1"; }
/PREFIX_TYPE_2/ { type = "TYPE_2"; }
/PREFIX/ { //stuff to do for all prefixes, after specific handling
printf("[%s] [DATA: $2]", type, data)
}
你可以在gawk:中这样做
awk 'BEGIN { FS="," }
/PREFIX/ {
if (/TYPE_1/) {printf "[TYPE1] [DATA: $2]"} // <-- included pattern
if (/TYPE_2/) {printf "[TYPE2] [DATA: $2]"} // <-- another included pattern
... // <-- some more included patterns
}' "filename"
这里CCD_ 1相当于CCD_。查看文档中的详细信息(第6.1.2部分)。