AWK 中字符串中的正则表达式使用 if/then 控制结构?

AWK 中字符串中的正则表达式使用 if/then 控制结构?

问题

我想在 AWK 脚本中专门使用 AWK(GAWK、MAWK 等)来汇总字段 6 中包含“runner__.jpx”(下划线是两位数字 0-9 的占位符)的每个记录的字段 9 中的值以及字段 7 中的“好”。

样本文件

Feb 14 11:33:16 ringer a[2388]: runner01.jpx good aa 3
Feb 14 11:33:32 ringer a[2388]: runner24.jpx good xx 1
Feb 14 11:33:39 ringer a[1894]: jogger02.jpx good aa 5
Feb 14 11:33:45 ringer a[2388]: runner99.jpx stop cc 1

试图

我怎么能这样做呢?我尝试使用 if 语句,例如:

BEGIN {
    sum = 0
}

{
    if (($6 == "runner"[0-9][0-9]".jpx") && ($7 == "good"))
        sum += $9
}

END {
        printf sum
}

有没有办法通过使用 if 语句匹配字段中的字符串来做到这一点?我可以在 if 语句中使用正则表达式吗?有什么替代方法可以做到这一点?谢谢。

答案1

以下应该可以完成这项工作。请注意,您不需要显式的ifs,只需使用 的awk隐式模式操作模型

awk  '$6 ~ /^runner[0-9][0-9]\.jpx$/ && $7 == "good" {s += $9};
      END{print s}' input.file

相关内容