免费注册 查看新帖 |

Chinaunix

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

[文本处理] 求助awk对文本格式化匹配处理 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2017-03-29 16:33 |只看该作者 |倒序浏览
要从如下格式的log内收集每半小时内server状态是up的数量。。有几个条件比较苛刻,只有第二列是up,并且最后一列包含server的才能被统计。。
想用awk做的,但是条件太多了,学习不精,一时不知道如何下手。。

文件:
8:01:01 up XX- (server1)
8:02:01 up XX- (server3)
9:04:01 up XX- (test)
10:01:01 down XX- (server1)
10:21:01 up XX- (down)
10:29:11 up XX- (server2)
12:01:01 down XX- (server2)
15:01:01 up XX- (server2)


希望输出结果是:
8:00~8:30   2
8:30~9:00   0
9:00~9:30   0
9:30~10:00 0
10:00~10:30 2
10:30~11:00 0
...
...


论坛徽章:
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
2 [报告]
发表于 2017-03-29 16:52 |只看该作者
本帖最后由 关阴月飞 于 2017-03-29 16:53 编辑

你需要统计的时间段起止是多少?  是固定的  00:00  - 23:59 ?    还是要根据文件中的时间动态生成?

论坛徽章:
0
3 [报告]
发表于 2017-03-29 16:59 |只看该作者
回复 2# 关阴月飞

24小时内,就是0:00 ~23: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
4 [报告]
发表于 2017-03-29 17:02 |只看该作者
回复 3# jeffinier

文本里面没有现过的的时间段,是不是也要打出来?比如你举的例子里的打出来的结果就是:
00:00-00:30 0
00:31-00:59 0
01:00-01:30 0
.
.
.
23:31-23:59 0

论坛徽章:
0
5 [报告]
发表于 2017-03-29 17:16 |只看该作者
回复 4# 关阴月飞

如果文本中没有出现过的时间可以不用打印,当然都打印出来也没问题。

论坛徽章:
1
15-16赛季CBA联赛之江苏
日期:2016-10-26 16:19:04
6 [报告]
发表于 2017-03-29 17:52 |只看该作者
awk -F '[: ]+' '$4=="up"&&$NF~/server/{if($1<30)a[$1":00~"$1":30"]++;else a[$1":30~"$1+1":00"]++}{if($1<30)a[$1":00~"$1":30"]+=0;else a[$1":30~"$1+1":00"]+=0}END{for(i in a)print i,a[i]}'  file

论坛徽章:
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
7 [报告]
发表于 2017-03-29 17:59 |只看该作者
本帖最后由 关阴月飞 于 2017-03-29 18:11 编辑

[root@hk-dev test]# awk '{split($1,a,":");t=a[2]>30?a[1]":31-"a[1]":59":a[1]":00-"a[1]":30";s[t]}$2=="up" && $NF ~ /server/{s[t]++}END{for(i in s)print i,+s|"sort -n" }' a
8:00-8:30 2
9:00-9:30 0
10:00-10:30 1
12:00-12:30 0
15:00-15:30 1

[root@~]# cat a
8:01:01 up XX- (server1)
8:02:01 up XX- (server3)
9:04:01 up XX- (test)
10:01:01 down XX- (server1)
10:21:01 up XX- (down)
10:29:11 up XX- (server2)
12:01:01 down XX- (server2)
15:01:01 up XX- (server2)



论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
8 [报告]
发表于 2017-03-29 18:23 |只看该作者
8:01:01 up XX- (server1)
8:02:01 up XX- (server3)
9:04:01 up XX- (test)
10:01:01 down XX- (server1)
10:31:01 up XX- (server1)
10:35:44 up XX- (server1)
10:45:44 up XX- (server1)
10:46:44 up XX- (server1)
10:59:01 up XX- (down)
10:29:11 up XX- (server2)
12:01:01 down XX- (server2)
15:01:01 up XX- (server2)








论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
9 [报告]
发表于 2017-03-29 18:32 |只看该作者
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;

  4. my %hData = ();
  5. while (<DATA>){
  6.         my ($time, $ud, undef, $keys) = split;
  7.         next if ($ud ne 'up');
  8.         next if ($keys !~ /server/);
  9.         my ($hours, $minutes) = split (/:/, $time);
  10.         $hData{$hours}{int ($minutes / 30)}++;
  11. }

  12. foreach my $hh (sort {$a <=> $b} keys %hData){
  13.         foreach my $var (0, 1){
  14.                 my $v = $hData{$hh}{$var} // 0;
  15.                 next if (!$v);
  16.                 my ($mh, $mt) = (':00', ':30');
  17.                 my $ht = $var ? $hh + 1 : $hh;
  18.                 ($mh, $mt) = ($mt, $mh) if ($hh ne $ht);
  19.                 print join ('-', $hh . $mh, $ht . $mt), "\t", $hData{$hh}{$var}, "\n";
  20.         }
  21. }

  22. __DATA__
  23. 8:01:01 up XX- (server1)
  24. 8:02:01 up XX- (server3)
  25. 9:04:01 up XX- (test)
  26. 10:01:01 down XX- (server1)
  27. 10:31:01 up XX- (server1)
  28. 10:35:44 up XX- (server1)
  29. 10:45:44 up XX- (server1)
  30. 10:46:44 up XX- (server1)
  31. 10:59:01 up XX- (down)
  32. 10:29:11 up XX- (server2)
  33. 12:01:01 down XX- (server2)
  34. 15:01:01 up XX- (server2)
复制代码

论坛徽章:
0
10 [报告]
发表于 2017-03-30 09:40 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP