免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3020 | 回复: 9

[文本处理] 按照半小时为节点统计log [复制链接]

论坛徽章:
0
发表于 2014-06-21 11:25 |显示全部楼层

log

log

log的格式如图所示,对应字段解释为 时间|ip|uid|接口|返回码|耗时ms|入流量|出流量
现需求如下:30分钟为单位,一天分割成48个单位,统计30分钟内流量大小,流量是入流量和出流量的总和
日志中的时间格式如下所示
1.       00:00:00-----00:29:59
...
48.     23:30:00------23:59:59   

我现在的问题是不知道怎么处理时间?谢谢

论坛徽章:
0
发表于 2014-06-21 11:32 |显示全部楼层
给个log文件方便各位大大做测试,在线等!

access.log.zip

90.43 KB, 下载次数: 13

论坛徽章:
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
发表于 2014-06-21 12:31 |显示全部楼层
本帖最后由 关阴月飞 于 2014-06-21 16:43 编辑

手机写代码未测试:
  1. awk -F\| '{split($1,a,":| ");n=a[3]<30?a[2]*2+1:a[2]*2+2;b[a[1],n]+=($7+$8)}END{for(i in b)print i,b[i]}' urfile
复制代码

论坛徽章:
0
发表于 2014-06-21 13:34 |显示全部楼层
按照楼上大大命令执行的结果如下:
2014-06-20 45 1983653360
2014-06-20 27 1819663913
2014-06-19 47 289522
2014-06-20 37 1921587360
2014-06-20 19 2301751035
2014-06-20 47 1872584738
2014-06-20 29 1696229116
2014-06-20 39 1835831772
2014-06-20 1 1340296113
2014-06-20 11 378667757
2014-06-20 3 634310519
2014-06-20 21 1689834513
2014-06-20 31 1458833069
2014-06-20 13 898379901
2014-06-20 5 386975977
2014-06-20 41 1915777882
2014-06-20 23 1565600290
2014-06-20 33 1566018193
2014-06-20 15 1373314312
2014-06-20 7 364810684
2014-06-20 43 2189732326
2014-06-20 25 1952754712
2014-06-20 35 1659971484
2014-06-20 17 1429052397
2014-06-20 9 254111193

这个结果不对,看不懂第二个字段表示什么意思,第三行还有2014-06-19的数据,我希望得到的结果是
2014-06-20  00:00:00-00:29:59    流量大小(入流量+出流量)/1024
2014-06-20  00:30:00-00:59:59    流量大小(入流量+出流量)/1024
.........
2014-06-20  23:30:00-23:59:59   流量大小(入流量+出流量)/1024
就是把对应的时间范围打印出来,谢谢!

论坛徽章:
0
发表于 2014-06-21 15:01 |显示全部楼层
以下我做的是苦力活,肯定可以有简单的方法。有空再看看。

楼主你自己对一下结果,看对不对。

另外要注意的:hour=0;min=11 是有要求的,表示你的文件的第一行的小时与分钟的值。

  1. BEGIN{FS="|";all=0;hour=0;min=11;}
  2. {
  3. split($1,sj," |:");
  4. if(hour-sj[2]==0)
  5. {
  6.   if (sj[3]<30)
  7.         {
  8.                 if(min>30)
  9.                         {
  10.                                 print sj[1] " "hour":30-"hour":59 流量大小:"all/1024;
  11.                                 all=0;
  12.                         }
  13.                 all+=$NF+$(NF-1);
  14.         } else {
  15.                 if (min < 30)
  16.                         {
  17.                                 print sj[1] " "hour":00-"hour":29 流量大小:"all/1024;
  18.                                 all=0;
  19.                         }
  20.                 all+=$NF+$(NF-1);

  21.         }
  22. }else{
  23.         if (min < 30)
  24.                 {
  25.                         print sj[1] " "hour":00-"hour":29 流量大小:"all/1024;
  26.                         all=0;
  27.                 }else{
  28.                         print sj[1] " "hour":30-"hour":59 流量大小:"all/1024;
  29.                         all=0;
  30.                 }

  31. }
  32. hour=sj[2];
  33. min=sj[3];
  34. rq=sj[1];

  35. }

  36. END{
  37.         if (min < 30)
  38.                 {
  39.                         print rq " "hour":00-"hour":29 流量大小:"all/1024;
  40.                         all=0;
  41.                 }else{
  42.                         print rq " "hour":30-"hour":59 流量大小:"all/1024;
  43.                         all=0;
  44.                 }
  45. }
复制代码
结果如下:
  1. [root@localhost awk]# awk -f my.awk access.log.txt
  2. 2014-06-17 00:00-00:29 流量大小:1109.18
  3. 2014-06-17 06:30-06:59 流量大小:288.408
  4. 2014-06-17 07:00-07:29 流量大小:593.815
  5. 2014-06-17 07:30-07:59 流量大小:3164.55
  6. 2014-06-17 08:00-08:29 流量大小:100530
  7. 2014-06-17 08:30-08:59 流量大小:196155
  8. 2014-06-17 09:00-09:29 流量大小:929.029
  9. 2014-06-17 09:30-09:59 流量大小:1137.03
  10. 2014-06-17 10:00-10:29 流量大小:3062.69
  11. 2014-06-17 10:30-10:59 流量大小:4095.42
  12. 2014-06-17 11:00-11:29 流量大小:3578.38
  13. 2014-06-17 11:30-11:59 流量大小:4338.1
  14. 2014-06-17 12:00-12:29 流量大小:1795.5
  15. 2014-06-17 12:30-12:59 流量大小:13716.2
  16. 2014-06-17 13:00-13:29 流量大小:4060.81
  17. 2014-06-17 13:30-13:59 流量大小:7169.07
  18. 2014-06-17 14:00-14:29 流量大小:8107.75
  19. 2014-06-17 14:30-14:59 流量大小:3082.75
  20. 2014-06-17 15:00-15:29 流量大小:6076.31
  21. 2014-06-17 15:30-15:59 流量大小:8196
  22. 2014-06-17 16:00-16:29 流量大小:2572.39
  23. 2014-06-17 16:30-16:59 流量大小:10273.1
  24. 2014-06-17 17:00-17:29 流量大小:11470.6
  25. 2014-06-17 17:30-17:59 流量大小:1522.69
  26. 2014-06-17 18:00-18:29 流量大小:5076.8
  27. 2014-06-17 18:30-18:59 流量大小:5536.2
  28. 2014-06-17 19:00-19:29 流量大小:3216.41
  29. 2014-06-17 19:30-19:59 流量大小:8687.79
  30. 2014-06-17 20:00-20:29 流量大小:5130.82
  31. 2014-06-17 20:30-20:59 流量大小:2171.14
  32. 2014-06-17 21:00-21:29 流量大小:2022.52
  33. 2014-06-17 21:30-21:59 流量大小:4327.62
  34. 2014-06-17 22:00-22:29 流量大小:497.061
复制代码

论坛徽章:
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
发表于 2014-06-21 16:13 |显示全部楼层
dabing12130 发表于 2014-06-21 11:25
一天分割成48个单位,统计30分钟内流量大小,


第二列就是时间段顺序呀:
按你说的这种得到的:

日志中的时间格式如下所示
1.       00:00:00-----00:29:59
...
48.     23:30:00------23:59:59   

论坛徽章:
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
发表于 2014-06-21 16:32 |显示全部楼层
回复 4# dabing12130


    按照你的格式改了一下:
  1. awk -F\| '{split($1,a,":| ");n=a[3]<30?a[2]":00-"a[2]":29":a[2]":30-"a[2]":59";b[a[1]" "n]+=($7+$8)}END{for(i in b)print i,b[i]/1024 |"sort -k2n"}' access.log.txt
复制代码

  1. [root@ awktest]# awk -F\| '{split($1,a,":| ");n=a[3]<30?a[2]":00-"a[2]":29":a[2]":30-"a[2]":59";b[a[1]" "n]+=($7+$8)}END{for(i in b)print i,b[i]/1024|"sort -k2n"}' access.log.txt
  2. 2014-06-17 00:00-00:29 1109.18
  3. 2014-06-17 06:30-06:59 289.758
  4. 2014-06-17 07:00-07:29 595.163
  5. 2014-06-17 07:30-07:59 3164.55
  6. 2014-06-17 08:00-08:29 100532
  7. 2014-06-17 08:30-08:59 196155
  8. 2014-06-17 09:00-09:29 981.336
  9. 2014-06-17 09:30-09:59 1137.03
  10. 2014-06-17 10:00-10:29 3128.68
  11. 2014-06-17 10:30-10:59 4095.42
  12. 2014-06-17 11:00-11:29 3614.16
  13. 2014-06-17 11:30-11:59 4338.1
  14. 2014-06-17 12:00-12:29 1819.92
  15. 2014-06-17 12:30-12:59 13716.2
  16. 2014-06-17 13:00-13:29 4108.91
  17. 2014-06-17 13:30-13:59 7169.07
  18. 2014-06-17 14:00-14:29 8109.01
  19. 2014-06-17 14:30-14:59 3082.75
  20. 2014-06-17 15:00-15:29 6076.31
  21. 2014-06-17 15:30-15:59 8196
  22. 2014-06-17 16:00-16:29 2629.54
  23. 2014-06-17 16:30-16:59 10273.1
  24. 2014-06-17 17:00-17:29 11528.1
  25. 2014-06-17 17:30-17:59 1522.69
  26. 2014-06-17 18:00-18:29 5115.04
  27. 2014-06-17 18:30-18:59 5536.2
  28. 2014-06-17 19:00-19:29 3217.77
  29. 2014-06-17 19:30-19:59 8687.79
  30. 2014-06-17 20:00-20:29 5167.65
  31. 2014-06-17 20:30-20:59 2171.14
  32. 2014-06-17 21:00-21:29 2065.05
  33. 2014-06-17 21:30-21:59 4327.62
  34. 2014-06-17 22:00-22:29 547.884
  35. 2014-06-17 22:30-22:59 2057.86
复制代码

论坛徽章:
0
发表于 2014-06-21 16:44 |显示全部楼层
感谢两位大大,都可以拿到的结果,文件比较大的话,我估计效率不太高,我现在log大小大概在300多M,感觉就要几十秒。

论坛徽章:
0
发表于 2014-06-21 16:58 |显示全部楼层
回复 7# 关阴月飞


    学习了。

论坛徽章:
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
发表于 2014-06-21 17:00 |显示全部楼层
回复 8# dabing12130


    日志文件做好切割,就能防止文件过大......
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP