免费注册 查看新帖 |

Chinaunix

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

[文本处理] 计算用户连续出现次数。 [复制链接]

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-05-29 12:47 |只看该作者 |倒序浏览
本帖最后由 expert1 于 2014-05-29 20:16 编辑

最近论坛问题质量下降,来个题目大家耍一下。

来自群的问题,为了简明起见,做了转化。大家都有上课签到点名的经历,比如在一个月内(日期连续,包含周末节假日)某user连续签到3天以上算有效的签到,并且计算为N-1次(N必须大于3),现在给出签到表,统计该人连续出清天数和一个时间段内总有效签到次数。
e.g 某人2014-6-1到2014-6-5连续出现,那么算有效(符合连续并且大于3天的条件),则应该打印

2014-6-1 2014-6-5 somebody 4

6-6 somebody不来签到了,7,8号来一天,9号又不来了,虽然连续但少于3天,无效。 以此类推,假如10-14号又连续签到,应该打印

2014-6-10 2014-6-14 somebody 3
。。。 #省略若干
。。。。。。
最后统计somebody该时间段内签到次数,4+3=7

现在提供数据如下(由于跨年份/月份的可以用awk的时间函数处理,简单起见,就直接简单列出了数字来替代,否则直接gensub或者mktime之类的加工一下没什么难度)

51
cj
bob
zooyo
tom
52
tom
cj
53
tom
zooyo
cj
54
zooyo
cj
55
bob
56
bob
cj
57
zooyo
bob
tom
cj
58
tom
cj
59
tom
60
tom
cj
数字代表日期,上面说了,真正日期可以用函数加工为UNIX时间,简明起见,就用连续数字代替。
根据上述要求,结果应该是
55-57 bob 2
51-54 cj 3
56-58 cj 2
51-53 tom 2
57-60 tom 3
########## summary ##############
bob 2
cj 5
tom 5
我的代码,为了不干扰大家,隐藏起来。

更正: 代码在二楼,放code block里面了。论坛会吃掉i做index。只能放code区里。

更多测试数据(非日期的数据不含数字,提醒一下免得目测的眼花)
20140401
caoyihong
chengwei
dengqinglin
gongll
wangying
duxuedong
huanglu.px
huangshengming
leizhenguo
liaoweiping
linping
lishaoqing
liujianyi
liuqinghua
20140402
jxmailtestvip
caoyihong
chengwei
dengqinglin
duxuedong
huanglu.px
lihh
20140403
jxmailtestvip
caoyihong
chengwei
duxuedong
huanglu.px
leizhenguo
liaoweiping
linping
lishaoqing
liujianyi
lill
20140404
chengwei
dengqinglin
duxuedong
huanglu.px
huangshengming
leizhenguo
liaoweiping
linping
lishaoqing
zhaoqun
liuqinghua
20140405
zhaoqun
20140406
gongll
20140407
gongll
20140408
gongll
20140409
dengqinglin
chengwei
duxuedong
huanglu.px
liuqinghua
gongll
huangshengming
liaoweiping
linping
caoyihong
lishaoqing
liujianyi
20140410
lishaoqing
dengqinglin
liaoweiping
wangying
duxuedong
huanglu.px
chengwei
huangshengming
leizhenguo
linping
liujianyi
liuqinghua

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
2 [报告]
发表于 2014-05-29 12:53 |只看该作者
游客,如果您要查看本帖隐藏内容请回复

论坛会吃掉i做key的情况,放code里面了。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
3 [报告]
发表于 2014-05-29 13:16 |只看该作者
大神来教学,速度来学习.

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
4 [报告]
发表于 2014-05-29 13:52 |只看该作者
先看答案再做题~

论坛徽章:
0
5 [报告]
发表于 2014-05-29 14:14 |只看该作者
进来学习学习

论坛徽章:
0
6 [报告]
发表于 2014-05-29 15:09 |只看该作者
借道问问这是为啥,数据用的楼主的,

awk '{a[$0]+=1}END{for(i in a)print i,(a[i])}' file

结果
1140404
5ngqinglin
1140405
1ll
3uqinghua
5nping
4izhenguo
1140406
5shaoqing
6anglu.px
4oyihong
1140407
1140408


a[i]把i 前面几个数据给替换掉了,这是为啥捏?

论坛徽章:
0
7 [报告]
发表于 2014-05-29 15:26 |只看该作者
看看答案先

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
8 [报告]
发表于 2014-05-29 16:17 |只看该作者
回复 6# kaober


    没仔细看,开头是不是有空格?或者dos2unix看下。

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
9 [报告]
发表于 2014-05-29 16:57 |只看该作者
{quote}
数字代表日期,上面说了,真正日期可以用函数加工为UNIX时间,简明起见,就用连续数字代替。
{quote}

版主的代码应该是只考虑连续日期的操作,万一哪天大家集体逃课就略过一天了哈。

论坛徽章:
0
10 [报告]
发表于 2014-05-29 17:02 |只看该作者
expert1 发表于 2014-05-29 16:17
回复 6# kaober


多谢版主,确实是文件格式问题。原来的文件是UNICODE,转成ascii就好了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP