我使用下面的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
问题是它正在打印所有正则表达式匹配的行用于计算。如何避免在控制台上打印线?
答案 0 :(得分:1)
您应该将第一个表达式seconds[$3]=1;
括在方括号{}
中,以防止&#34; 直接&#34;评价:
'{ seconds[$3]=1 }'
此外,如果输入文件中的所有字段用&#34;任意&#34;空格,无需指定-F" "
- awk 将自动分隔空格(默认情况下)