免费注册 查看新帖 |

Chinaunix

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

请教统计时间段内出现次数问题(已解决) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-07 15:24 |只看该作者 |倒序浏览
有一文件,内容都是时间记录,大概如下        
10:46:16                                    
10:53:28                                    
11:48:01                                    
11:50:01                                    
11:54:01                                    
11:55:01                                    
12:02:40                                    
12:56:01                                    
12:58:01                                    
13:00:01                                    
....                                       
现在想统计每隔一小时有几条记录              
结果类似:                                 
00:00-00:59    x                          
...                                         
10:00-10:59   2                          
11:00-11:59   4                          
...                                         
23:00-23:59   x     
请教高手怎么写?

[ 本帖最后由 sby0329 于 2009-4-7 17:15 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-04-07 15:28 |只看该作者
awk -F ":" '{a[$1]++}END{for (j in a) print j":00-"j":59",a[j]}' file

论坛徽章:
11
金牛座
日期:2015-03-19 16:56:22数据库技术版块每日发帖之星
日期:2016-08-02 06:20:00数据库技术版块每日发帖之星
日期:2016-04-24 06:20:00数据库技术版块每日发帖之星
日期:2016-04-13 06:20:00IT运维版块每日发帖之星
日期:2016-04-13 06:20:00数据库技术版块每日发帖之星
日期:2016-02-03 06:20:00数据库技术版块每日发帖之星
日期:2015-08-06 06:20:00季节之章:春
日期:2015-03-27 15:54:57羊年新春福章
日期:2015-03-27 15:54:37戌狗
日期:2015-03-19 16:56:41数据库技术版块每日发帖之星
日期:2016-08-18 06:20:00
3 [报告]
发表于 2009-04-07 15:30 |只看该作者

回复 #1 sby0329 的帖子


  1. awk -F':' '{a[$1]++}END{for (i in a) print i":00-"i":59",a[i]}' ufile
复制代码


哦咧,,慢了慢了...

论坛徽章:
0
4 [报告]
发表于 2009-04-07 15:36 |只看该作者
谢谢楼上两位!还有一个问题,如果我想列出每个时间段的记录,而不只是出现的次数,该如何写呢?
结果类似:
....
10:00-10:59   10:46:16
                           10:53:28
11:00-11:59   11:48:01
                           11:50:01
                           11:54:01
                           11:55:01
.....

论坛徽章:
0
5 [报告]
发表于 2009-04-07 15:44 |只看该作者

回复 #4 sby0329 的帖子

[root@Mylinux tmp]# awk -F ":" '{v=$1":00-"$1":59";a[v]=(a[v]?a[v]"\n            "$00)}END{for (j in a) print j,a[j]}' file
12:00-12:59 12:02:40                                    
            12:56:01                                    
            12:58:01                                    
13:00-13:59 13:00:01
10:00-10:59 10:46:16                                    
            10:53:28                                    
11:00-11:59 11:48:01                                    
            11:50:01                                    
            11:54:01                                    
            11:55:01

[ 本帖最后由 ywlscpl 于 2009-4-7 15:47 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2009-04-07 15:46 |只看该作者
刚才以为楼主要打印24小时的,不贴出来浪费了
awk -F ":" '{a[$1+0]++}END{for (j=0;j<=23;j++) {if (!a[j]) a[j]="x";printf "%02d:00-%02d:59 %s\n",j,j,a[j]}}' file
00:00-00:59 x
01:00-01:59 x
02:00-02:59 x
03:00-03:59 x
04:00-04:59 x
05:00-05:59 x
06:00-06:59 x
07:00-07:59 x
08:00-08:59 x
09:00-09:59 x
10:00-10:59 2
11:00-11:59 4
12:00-12:59 3
13:00-13:59 1
14:00-14:59 x
15:00-15:59 x
16:00-16:59 x
17:00-17:59 x
18:00-18:59 x
19:00-19:59 x
20:00-20:59 x
21:00-21:59 x
22:00-22:59 x
23:00-23:59 x

论坛徽章:
0
7 [报告]
发表于 2009-04-07 15:58 |只看该作者
awk -F ":" '{a[$1]=$0"\n\t\t\b\b\b\b"a[$1]}END{for (j in a) print j":00-"j":59",a[j]}' urfile

论坛徽章:
0
8 [报告]
发表于 2009-04-07 16:01 |只看该作者

回复 #2 ywlscpl 的帖子

多谢ywlscpl !!!
我正是需要24小时的。
再请教一下,如果是半小时统计一次,又是怎样的呢?

论坛徽章:
0
9 [报告]
发表于 2009-04-07 16:13 |只看该作者

回复 #8 sby0329 的帖子

  1. awk -F ":" '$2<30{a[$1+0"m"]++}$2>=30{a[$1+0"n"]++}END{for (j=0;j<=23;j++) {if (!a[j"m"]) a[j"m"]="x";if (!a[j"n"]) a[j"n"]="x";printf "%02d:00-%02d:30 %s\n",j,j,a[j"m"];printf "%02d:30-%02d:59 %s\n",j,j,a[j"n"]}}' file
复制代码


result:
...09:00-09:30 x
09:30-09:59 x
10:00-10:30 x
10:30-10:59 2
11:00-11:30 x
11:30-11:59 4
12:00-12:30 1
12:30-12:59 2
13:00-13:30 1
13:30-13:59 x
14:00-14:30 x
14:30-14:59 x
.....

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
10 [报告]
发表于 2009-04-07 16:17 |只看该作者
原帖由 sby0329 于 2009-4-7 15:36 发表
谢谢楼上两位!还有一个问题,如果我想列出每个时间段的记录,而不只是出现的次数,该如何写呢?
结果类似:
....
10:00-10:59   10:46:16
                           10:53:28
11:00-11:59   11 ...

  1. #!/bin/awk -f
  2. BEGIN {FS=":"}
  3. {
  4.         a[$1,$0]=$0;
  5. }
  6. END {
  7.         x="";
  8.         asort(a);
  9.         for(i=1;;i++)
  10.         if(i in a) {
  11.                 $0=a[i];
  12.                 if($1!=x) {
  13.                         printf("%02d:00-%02d:59\t%s\n",$1,$1,a[i]);
  14.                         x=$1;
  15.                 } else {
  16.                         printf("\t\t%s\n",a[i]);
  17.                 }
  18.         } else
  19.                 break
  20. }

复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP