免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3123 | 回复: 15

[文本处理] 红包求助,awk分析日志,难度略大 [复制链接]

论坛徽章:
0
发表于 2017-06-29 17:06 |显示全部楼层
本帖最后由 10prince 于 2017-07-01 17:42 编辑

本人对awk的复杂玩法不太懂,趁机好好学习一下。
以下是问题描述:


已经有分析nginx日志http状态码文本文件:
第一列是状态码,第二列是该状态码的数量
  1. 200   733612
  2. 201   3
  3. 302   11271
  4. 304   36888
  5. 400   274
  6. 403   105
  7. 404   7967
  8. 412   18
  9. 500   2
  10. 502   21
复制代码



感谢啊,关贴, 各位大神给的例子都很厉害


论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
发表于 2017-06-29 17:31 |显示全部楼层
本帖最后由 关阴月飞 于 2017-06-30 08:49 编辑

awk '$1>=200&&$1<400{a+=$2}\
       $1>=400&&$1<500{b+=$2}\
       $1>=500{c+=$2}\
       $1>=400{d[$1]+=$2}\
      {s+=$2}\
      END {
      print "日志总数",s,"100%";
      for(n in d)print i,d[n],d[n]/s*100"%"
      print "2xx-3xx正常:",a,a/s*100"%";
      print "4xx异常:",b,b/s*100"%";
      print "5xx异常:",c,c/s*100"%";
     }'  urfile    |column -t


TIM图片20170629185410.png

论坛徽章:
0
发表于 2017-06-29 18:27 |显示全部楼层
关阴月飞 发表于 2017-06-29 17:31
awk '$1>=200&&$1=400&&$1=500{c+=$2}\
       $1>=400{d[$1]+=$2}\
      {s[/ ...

没跑通,  对awk语法也不是特别熟悉, 求大侠跑通试试看

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
发表于 2017-06-29 18:32 |显示全部楼层
本帖最后由 关阴月飞 于 2017-06-29 18:38 编辑

回复 3# 10prince
CU编辑器吃了我的字符串:

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
发表于 2017-06-29 18:52 |显示全部楼层
回复 1# 10prince

$ awk 'function px(n){p(n"xx异常总比",a[n])}function p(s,n){print s,n,int(n*100/t)"%"}{a[int($1/100)]+=$2;t+=$2}$1>=400{if(!e[$1])c++;d[c]=$1;e[$1]+=$2}END{p("日志总数",t);for(n=1;n<=c;++n){k=d[n];p(k,e[k])}print"-----------";p("2xx~3xx正 常"a[2]+a[3]);px(4);px(5)}' a.log | column -t
日志总数     790161  100%
400          274     0%
403          105     0%
404          7967    1%
412          18      0%
500          2       0%
502          21      0%
-----------
2xx~3xx正常  781774  98%
4xx异常总比  8364    1%
5xx异常总比  23      0%

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
发表于 2017-06-29 18:54 |显示全部楼层
回复 4# 关阴月飞


[ i ] it's not good in CU
i => n => num, cnt => number, count
for(i =1;i <=X; i++) a[ i  ]=...
for(n=1;n<=X;n++) a[ n ]=

评分

参与人数 1信誉积分 +10 收起 理由
关阴月飞 + 10 赞一个!

查看全部评分

论坛徽章:
0
发表于 2017-06-29 19:43 |显示全部楼层
回复 4# 关阴月飞

还把你的图,附件也吃了,我刷不出来你上传的图片, 好诡异,也没报 404

论坛徽章:
0
发表于 2017-06-29 19:46 |显示全部楼层
回复 5# jason680

感谢大神,  命令行里跑, 没问题啊! 但是百分比的计算结果不太OK,我调整到 awk脚本里  就不通了,感觉语法错误,我太菜了,,,
#!/usr/bin/awk -f
....



论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
发表于 2017-06-29 20:19 |显示全部楼层
回复 8# 10prince

$ awk 'function px(n){p(n"xx ERR",a[n])}function p(s,n){printf("%-12s %8d %8.2f%%\n",s,n,n/t*100)}{a[int($1/100)]+=$2;t+=$2}$1>=400{if(!e[$1])c++;d[c]=$1;e[$1]+=$2}END{p("Total",t);for(n=1;n<=c;++n){k=d[n];p(k,e[k])}print"--------------------------------";p("2xx~3xx",a[2]+a[3]);px(4);px(5)}' a.log
  1. Total          790161   100.00%
  2. 400               274     0.03%
  3. 403               105     0.01%
  4. 404              7967     1.01%
  5. 412                18     0.00%
  6. 500                 2     0.00%
  7. 502                21     0.00%
  8. --------------------------------
  9. 2xx~3xx        781774    98.94%
  10. 4xx ERR          8364     1.06%
  11. 5xx ERR            23     0.00%
复制代码



论坛徽章:
0
发表于 2017-06-29 20:25 |显示全部楼层
回复 9# jason680

函数搞的很不错啊!!!  编程老司机, 代码写的厉害~  
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP