活用awk高效进行文本或日志分析处理
2012-05-29 07:49:19 来源:我爱运维网 评论:0 点击:
案例:使用awk与sort -nr分析访问日志,找出每种请求返回状态码的请求个数:访问日志的文件格式:我们最常用的处理方式为:cat /home/logs/ngi...
案例:使用awk与sort -nr分析访问日志,找出每种请求返回状态码的请求个数:
访问日志的文件格式:
113.31.27.213 www.5iops.com - [15/Apr/2012:04:06:17 +0800] "GET /faq/ HTTP/1.0" 200 2795 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.2 Safari/535.11" 118.119.120.248, 222.215.136.44 0.003 192.168.0.25:80 200 3.31
我们最常用的处理方式为:cat /home/logs/nginx/www.5iops.com.access.log|awk '{print $(NF-1)}'|sort -nr |uniq -c ,但其实,这个处理的效率较低:
time cat /home/logs/nginx/www.5iops.com.access.log|awk '{print $(NF-1)}'|sort -nr |uniq -c
访问日志的文件格式:
113.31.27.213 www.5iops.com - [15/Apr/2012:04:06:17 +0800] "GET /faq/ HTTP/1.0" 200 2795 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.2 Safari/535.11" 118.119.120.248, 222.215.136.44 0.003 192.168.0.25:80 200 3.31
我们最常用的处理方式为:cat /home/logs/nginx/www.5iops.com.access.log|awk '{print $(NF-1)}'|sort -nr |uniq -c ,但其实,这个处理的效率较低:
time cat /home/logs/nginx/www.5iops.com.access.log|awk '{print $(NF-1)}'|sort -nr |uniq -c
1 200"
3 "404"
4 "304"
7377 "200"
48 "-"
real 0m0.107s
user 0m0.102s
sys 0m0.013s
time cat /home/logs/nginx/www.5iops.com.access.log|awk '{a[$(NF-1)]++} END{for (i in a) print i " " a[i]}'
"304" 4
"404" 3
"200" 7399
"-" 49
200" 1
real 0m0.018s
user 0m0.013s
sys 0m0.008s
可见使用后面的awk处理效率高10倍~
有一个文本文件,内容为每行为每隔5分钟记录的带宽峰值,共一个月(共8640行),我需要计算出,每天的峰值并排序:
traffic文件格式:
-bash-4.1$ cat traffic.txt|more
-bash-4.1$ cat traffic.txt|more
2012-04-01 00:00 1952.34 mbps
2012-04-01 00:05 2198.34 mbps
2012-04-01 00:10 2117.07 mbps
2012-04-01 00:15 2104.83 mbps
2012-04-01 00:20 1878.73 mbps
…
一种常见解决方法:
更高效的解决方法:
一种常见解决方法:
-bash-4.1$ for i in `cat traffic.txt|awk '{print $1}'|sort|uniq`; do cat traffic.txt|grep $i|sort -nr -k3 |head -1 ; done
2012-04-01 21:35 3876.02 mbps
2012-04-02 21:15 3577.66 mbps
2012-04-03 21:35 3371.59 mbps
2012-04-04 21:10 3087.17 mbps
2012-04-05 21:35 3202.44 mbps
2012-04-06 20:45 3703.53 mbps
2012-04-07 20:40 4177.43 mbps
2012-04-08 14:25 3837.9 mbps
2012-04-09 20:50 3082.46 mbps
...更高效的解决方法:
-bash-4.1$ cat traffic.txt |awk '{if($3 > a[$1])a[$1]=$3} END{for(i in a)print i " " a[i]}'
2012-04-28 5369.81
2012-04-19 3474.73
2012-04-29 4824.24
2012-04-10 2979.91
2012-04-01 3876.02
2012-04-20 3866.19
2012-04-11 3548.73
2012-04-02 3577.66
2012-04-30 4077.35
...
经对比,后面一种方法处理执行效率仍然高10倍.可见活用awk对文本或日志分析处理效率明显提高.
...
经对比,后面一种方法处理执行效率仍然高10倍.可见活用awk对文本或日志分析处理效率明显提高.
上一篇:第一页
下一篇:实现通用的本地与远程数据备份SHELL脚本
分享到:
收藏

评论排行
- ·Windows(Win7)下用Xming...(92)
- ·使用jmx client监控activemq(20)
- ·Hive查询OOM分析(14)
- ·复杂网络架构导致的诡异...(8)
- ·使用 OpenStack 实现云...(7)
- ·影响Java EE性能的十大问题(6)
- ·云计算平台管理的三大利...(6)
- ·Mysql数据库复制延时分析(5)
- ·OpenStack Nova开发与测...(4)
- ·LTPP一键安装包1.2 发布(4)
- ·Linux下系统或服务排障的...(4)
- ·PHP发布5.4.4 和 5.3.1...(4)
- ·RSYSLOG搭建集中日志管理服务(4)
- ·转换程序源码的编码格式[...(3)
- ·Linux 的木马程式 Wirenet 出现(3)
- ·Nginx 发布1.2.1稳定版...(3)
- ·zend framework文件读取漏洞分析(3)
- ·Percona Playback 0.3 development release(3)
- ·运维业务与CMDB集成关系一例(3)
- ·应该知道的Linux技巧(3)