如何在 awk 中匹配正则表达式时避免打印行



我使用以下awk命令查找文件中某些模式的数量:

awk -F" " '
    seconds[$3]=1;
    /[[a-z_]*] start/{start[$3]++}
    /[[a-z_]*] end/{end[$3]++;sumresptime[$3]+=substr($(NF-1),2)}
END {
    num = asorti(seconds, indices);
    for (i=1;i<=num;i++)
    {
            requests = start[indices[i]] > 0 ? start[indices[i]] : 0;
            responses = end[indices[i]] > 0 ? end[indices[i]] : 0;
            avgresptime = end[indices[i]] > 0 ? sumresptime[indices[i]]/end[indices[i]] : 0;
            print indices[i]" "requests"|"responses"|"avgresptime"
    }
}' $logfile

问题是它正在打印与用于计算的正则表达式匹配的所有行。如何避免在控制台上打印线条?

应将

第一个表达式seconds[$3]=1;括在方括号中,{}以防止"直接"求值:

'{ seconds[$3]=1 }'

此外,如果输入文件中的所有字段都由"任意"空格分隔,则无需指定-F" " - awk将自动用空格分隔(默认情况下)

最新更新