如何在awk

时间:2017-11-01 10:05:29

标签: regex 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

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

1 个答案:

答案 0 :(得分:1)

您应该将第一个表达式seconds[$3]=1;括在方括号{}中,以防止&#34; 直接&#34;评价:

'{ seconds[$3]=1 }'

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