ITPub博客

首页 > Linux操作系统 > Linux操作系统 > AWK应用之统计访问日志

AWK应用之统计访问日志

原创 Linux操作系统 作者:壹頁書 时间:2015-02-28 11:37:54 0 删除 编辑
Nginx和Apache都支持访问日志,可以记录页面请求的时间
统计页面的访问时间,可以作为调优的一种依据.

实验模拟Nginx的访问日志,统计页面访问的各项数值.

首先创建模拟数据
create table t  
select 
concat('/cms/',ceil(rand()*5),'.html') path,
now()-interval id+ceil(rand()*60) minute createtime,
ceil(rand()*100) ts 
from nums where id<30;

其中nums是数字辅助表,参见
http://blog.itpub.net/29254281/viewspace-1362897/

将数据导出为文本,模拟访问日志
select * from t into outfile '/tmp/log.txt';

数据如下,分别是访问的页面,访问时间和访问时长


1.统计访问总时长(sum)
awk '{a[$1]+=$4} END{for (i in a) printf("%10s %5d\n",i,a[i])}' log.txt | sort



结果和数据库统计是一样的


2.统计页面访问次数
awk '{a[$1]+=1} END{for (i in a) printf("%10s %5d\n",i,a[i])}' log.txt | sort

3.统计最长访问时间
awk '{if(a[$1]=="") a[$1]=$4; if(a[$1]>$4) a[$1]=$4} END{for (i in a) printf("%10s %5d\n",i,a[i])}' log.txt | sort

4.统计最短访问时间
awk '{if(a[$1]=="") a[$1]=$4; if(a[$1]<$4) a[$1]=$4} END{for (i in a) printf("%10s %5d\n",i,a[i])}' log.txt | sort

5.统计平均访问时间
awk '{s[$1]+=$4;c[$1]+=1} END{for (i in c) printf("%10s %5d\n",i,s[i]/c[i])}' log.txt | sort

6.统计一个时间段内的最大访问时间
这个比较复杂,需要单独写一个脚本文件了
vim cal.awk

#!/bin/awk -f
{    
    dateStr = $2" "$3;  
    split(dateStr, dateStrArr, "[\\- :]");
    dateStr = "";
    for(i=1;i<=length(dateStrArr);i++) 
        dateStr = dateStr" "dateStrArr[i]; 
    if(mktime(dateStr)>mktime("2015 02 28 09 00 00") && mktime(dateStr)
    {
        if(a[$1]=="") a[$1]=$4; 
        if(a[$1]<$4) a[$1]=$4; 
    }
}
END {for (i in a) printf("%10s %5d\n",i,a[i])}



在数据库中验证


用awk处理时间比较麻烦,需要按照指定的格式拼凑mktime函数的参数.

参考:
http://www.cnblogs.com/chengmo/archive/2010/10/08/1845913.html
http://coolshell.cn/articles/9070.html

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29254281/viewspace-1443562/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: HashMap死锁分析
请登录后发表评论 登录
全部评论

注册时间:2013-10-19

  • 博文量
    620
  • 访问量
    6340606