免费注册 查看新帖 |

Chinaunix

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

[文本处理] 讨论一个不确定日期的数据统计(最后涉及到了数据结构) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-08-28 00:53 |只看该作者 |倒序浏览
数据样本。第四列为无效值。

id1  0719  是              X
id1  0722  是              X
id2  0723  是              Y
id2  0724  是              Y
id3  0725  是              X
id1  0725  是              X
id4  0718  是              Z
id4  0719  是              Z
id5  0725  是              X
id5  0726  是              X
id6  0725  是              X
id6  0626  是              X

id1  0426  是              X
id1  0519  是              X
id2  0625  是              Y
id2  0724  是              Y
id3  0125  是              X
id1  0125  是              X
id4  0724  是              Z
id4  0219  是              Z
id5  0425  是              X
id5  0326  是              X
id6  0225  是              X
id6  0126  是              X


先来一个确定日志的统计:
        要求对每周进行统计。
        如果1周内大于2次是的id进行统计并报告

上面的数据是随便编的。所以用上面的数据可能一个没有入选的。

思路:

首先是将第二列转为第几周。
而后
awk '{a[$1." ".$2]++;}END{for i in a{if(a[i]>2){print i;}}}' datafile
得到的是
id1        第一周
id2        第一周
id3        第三周
...
而后再来一个
awk '{a[$2]=a[$2]." ".$1;}END{for (i in a){print i,a[i]}}'|sort -k1


不知道我这么说明白了没有。
现在请教的是:
如果不是按照自然周来区分的。
而是按照每一天来遍历的。
那么该怎么做呢:

根据id切分出文件来。有多少个id就切分出多少个文件。
而后读取第2列值。如果之差小于7就将第三列值进行累加。
如果第二列值之差大于7(超过一周),就将这行抛弃。

而后继续读取下一行....

求问。这里用得到链表等数据结构是不是比较快点?并求一个思路。谢谢!

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
2 [报告]
发表于 2013-08-28 08:41 |只看该作者
而是按照每一天来遍历的。
那么该怎么做呢:

请给出以下内容:
1、原始文本
2、希望得到的完整结果
3、原始文本是根据什么规律得到结果的

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
3 [报告]
发表于 2013-08-28 10:18 |只看该作者
你的第一周是如何定义的,周末是星期六还是星期日。

比如今年的1月1日是星期2, 是只用计算5天呢,还是6天? 或者直接按1号到7号天算7天?

论坛徽章:
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
4 [报告]
发表于 2013-08-28 16:59 |只看该作者
没看懂需求啊。

论坛徽章:
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
5 [报告]
发表于 2013-08-29 09:48 |只看该作者
楼主这个用上面的数据可以得到相应的输出吗?没懂。

awk '{a[$1." ".$2]++;}END{for i in a{if(a[i]>2){print i;}}}' datafile
得到的是
id1        第一周
id2        第一周
id3        第三周

论坛徽章:
6
摩羯座
日期:2013-08-24 10:43:10狮子座
日期:2013-08-25 10:27:06天秤座
日期:2013-09-11 20:28:44午马
日期:2014-09-28 16:06:0015-16赛季CBA联赛之八一
日期:2016-12-19 13:55:0515-16赛季CBA联赛之天津
日期:2016-12-20 14:01:23
6 [报告]
发表于 2013-08-29 10:36 |只看该作者
这个问题,怎么还没进展?@yum2014等楼主解释

论坛徽章:
1
射手座
日期:2014-03-10 14:24:52
7 [报告]
发表于 2013-08-29 11:21 |只看该作者
统计报表的功能吧呵呵,你还真是没说明白,看的一头雾水。

论坛徽章:
0
8 [报告]
发表于 2013-11-05 19:53 |只看该作者
cao627 发表于 2013-08-29 10:36
这个问题,怎么还没进展?@yum2014等楼主解释


抱歉。好久没再看这个问题了。。。我有时间再研究下,谢谢各位的关注。

论坛徽章:
2
白羊座
日期:2013-11-18 19:52:42辰龙
日期:2014-09-07 07:46:06
9 [报告]
发表于 2013-11-06 10:46 |只看该作者
默认是今年还是某一年?

论坛徽章:
2
白羊座
日期:2013-11-18 19:52:42辰龙
日期:2014-09-07 07:46:06
10 [报告]
发表于 2013-11-06 10:57 |只看该作者
本帖最后由 damcool 于 2013-11-06 13:21 编辑
  1. [:~]> sort -k1,1 -k2,2 /tmp/date                                 
  2. id1  0125  是              X
  3. id1  0426  是              X
  4. id1  0519  是              X
  5. id1  0719  是              X
  6. id1  0722  是              X
  7. id1  0725  是              X
  8. id2  0625  是              Y
  9. id2  0723  是              Y
  10. id2  0724  是              Y
  11. id2  0724  是              Y
  12. id3  0125  是              X
  13. id3  0725  是              X
  14. id4  0219  是              Z
  15. id4  0718  是              Z
  16. id4  0719  是              Z
  17. id4  0724  是              Z
  18. id5  0326  是              X
  19. id5  0425  是              X
  20. id5  0725  是              X
  21. id5  0726  是              X
  22. id6  0126  是              X
  23. id6  0225  是              X
  24. id6  0626  是              X
  25. id6  0725  是              X
  26. [:~]> awk '{cmd="date -d \"2013"$2"\" +%U";cmd|getline d;close(cmd);a[$1":"d"week"]++}END{for (i in a) if (a[i]>1) printf"%s %d %s\n",i,a[i],b[i]}' /tmp/date|sort
  27. id1:29week 2
  28. id2:29week 3
  29. id4:28week 2
  30. id5:29week 2
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP