免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2014 | 回复: 4
打印 上一主题 下一主题

分析日志 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-08-07 16:58 |只看该作者 |倒序浏览
  1. 2007-08-06-17:10:01-connect-179
  2. 2007-08-06-17:10:11-connect-178
  3. 2007-08-06-17:10:21-connect-176
  4. 2007-08-06-17:10:31-connect-174
  5. 2007-08-06-17:10:41-connect-183
  6. 2007-08-06-17:10:51-connect-184
  7. 2007-08-06-17:11:01-connect-176
  8. 2007-08-06-17:11:11-connect-172
  9. 2007-08-06-17:11:21-connect-174
  10. 2007-08-06-17:11:31-connect-169
复制代码

我有这样的一些日志

我想没隔5分钟提取一次,去这些connect-后面的数值的平均值,并输出,并能输出时间(最好能写成从什么时候开始,结束)

这条命令只能输出全部的,请问该怎么写呢?
  1. awk -F'-' '{sum +=$6} END {print "Average:",sum/NR;}' connect_httpd.log
复制代码



谢谢

论坛徽章:
0
2 [报告]
发表于 2007-08-07 17:57 |只看该作者
awk -F- '{time=$4;sum +=$6; if(NR==1) printf("%s ~ ",time);} END {printf("%s Average: %d\n",time,sum/NR)}' connect_httpd.log

论坛徽章:
0
3 [报告]
发表于 2007-08-07 18:04 |只看该作者
我想分段取,比如10行为一组

论坛徽章:
0
4 [报告]
发表于 2007-08-07 19:30 |只看该作者
这样?

  1. gawk -F '-' '{ time = $4; sum += $6; if (NR % 10 != 0){ if (NR % 10 == 1){ printf("begin---%s",time); }}else{printf("Average: %d",sum/10);printf("end---%s\n",time);sum = 0;}} END {if (NR % 10 != 0){printf("Average: %d",sum/(NR % 10));printf("end---%s\n",time);}}'  connect_httpd.log
复制代码

论坛徽章:
0
5 [报告]
发表于 2007-08-07 23:42 |只看该作者
只要有数据进来,5分钟输出一次。
缺陷是如果第4分59秒以后很长时间才有数据过来,只有等有数据进来才能汇总前一次的数据。
awk能从管道“getline”,不管有没有数据立即返回吗?

tail -0f 文件名|awk -F"-" '
BEGIN{t0=systime();}
{
  n++;sum+=$6;
  secs=(t1=systime())-t0;
  if(secs>=300){
    print strftime("%Y.%m.%d.%H:%M:%S",t0) strftime(" - %Y.%m.%d.%H:%M:%S",t1),n,sum,sum/n;
    t0=t1;
    n=sum=0;
  }
}'
2007.08.07.23:26:25 - 2007.08.07.23:26:53 6 1079 179.833
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP