regex - awk 扩展模式匹配(在已匹配字符串的操作中嵌入模式匹配)

标签 regex awk pattern-matching gawk

我想要以下形式的句柄字符串:

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
          }

请注意,因为第一个模式匹配已经进入其 block ,并且只处理了一行,所以 block 中只有 ifs 是可以的。

如果你真的想要模式的易读性,你可以这样做:

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)
          }

关于regex - awk 扩展模式匹配(在已匹配字符串的操作中嵌入模式匹配),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12283412/

相关文章:

Javascript正则表达式看后面

java - 使用正则表达式匹配字符串中的数字

linux - bash 从列表中选择文件的最新版本

regex - awk,字段不匹配但应该匹配

php - 如何在某个字符之后匹配字符串中的第一个字符?

javascript - 如何在不增加子表达式计数的情况下匹配子表达式中的 n+ 个实例?

linux - 词频和-gt

Android:过滤特定 Uri 模式的 Intent

c# - 工厂模式在工厂类中实例化类

scala - 错误: not found: value:::