我使用以下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将自动用空格分隔(默认情况下)