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

how to avoid printing lines while matching regex in awk

我使用下面的awk命令在文件中查找特定模式的数目:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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

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


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

1
'{ seconds[$3]=1 }'

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