免费注册 查看新帖 |

Chinaunix

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

统计数字出现次数,可能有点难。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-26 09:58 |只看该作者 |倒序浏览
有一个csv文件,data.csv内容如下:
1,4,5,9,10,25
2,3,4,9,10,25
3,5,7,8,21,25
....more

此文件有每行有6位数字使用逗号分割。
要找出全文出现最多的4个数字的次数
例如:
4,9,10,25 1

4,9,10,25为出现的4个数字,1为出现的次数。

[ 本帖最后由 pigvip 于 2009-7-26 10:31 编辑 ]

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-01-24 06:20:00
2 [报告]
发表于 2009-07-26 10:08 |只看该作者
没看懂什么意思?每一行出现得最多的4位数字?不是统计全文出现得最多的4个数字?

比如第一行1,4,5,9,10,25,总共6个数字,每个数字都出现了一次,出现最多的数字出现次数都是1,那怎么选择哪4个数字?

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
3 [报告]
发表于 2009-07-26 10:10 |只看该作者

回复 #1 pigvip 的帖子

每行出现次数最多?

论坛徽章:
0
4 [报告]
发表于 2009-07-26 10:14 |只看该作者
原帖由 pigvip 于 2009-7-26 09:58 发表
有一个csv文件,data.csv内容如下:
1,4,5,9,10,25
2,3,4,9,10,25
3,5,7,8,21,25
....more

此文件有每行有6位数字使用逗号分割。
要找出每行出现最多的4个数字的次数
例如:
4,9,10,25 1

4,9,10,25 ...


要找出每行出现最多的4个数字的次数

应该是全文。每行怎么可能,你一行就6个数字,怎么找?

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
5 [报告]
发表于 2009-07-26 10:17 |只看该作者
确实难!

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-01-24 06:20:00
6 [报告]
发表于 2009-07-26 10:22 |只看该作者
如果是全文统计出现次数最多的4个数字,管道管道

tr ',' '\n'<xx|sort|uniq -c|sort -rn|head -4

[ 本帖最后由 Minsic 于 2009-7-26 13:12 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2009-07-26 10:30 |只看该作者
是在全文里找每行都包含的4个数字的总数。例如可以都包含
1,2,3,4 30次
3,6,7,8 20次

[ 本帖最后由 pigvip 于 2009-7-26 10:32 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2009-07-26 12:29 |只看该作者
是难得....
每行都有好几种组合....然后先算出每行的几种组合..然后每种组合对全文另外的每行的每种组合进行匹配......

论坛徽章:
0
9 [报告]
发表于 2009-07-26 14:01 |只看该作者

回复 #1 pigvip 的帖子

有一种简单的方法,先对每个输入行排序,比如3,2,6,4,5,1排完后为1,2,3,4,5,6,然后再生成该行的任意四个数字的组合,共有C(4,6),15中可能性,比如1,2,3,4  2,3,4,5  3,4,5,6  1,3,4,5  1,4,5,6 ...... ,将全部行生成的排列放到同一个文件,比如tmp中,然后执行tr ',' ' ' < tmp | sort -n -k1 -k2 | uniq -c | sort -n -r|head 4|tr ' ' ','
这样做效率有点低,但总体复杂度还是可以的,为O(nlgn),主要为排序所花的时间。

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-01-24 06:20:00
10 [报告]
发表于 2009-07-26 15:00 |只看该作者
是不是这样子的结果?

  1. awk '
  2. BEGIN{
  3.   FS=","
  4. }
  5. {
  6.   for(i=1;i<=NF-3;i++)
  7.     for(j=i+1;j<=NF-2;j++)
  8.       for(m=j+1;m<=NF-1;m++)
  9.         for(n=m+1;n<=NF;n++)
  10.           a[$i","$j","$m","$n]++
  11. }
  12. END{
  13.   for(i in a)
  14.     print i,a[i]
  15. }' data.csv|sort -k2rn|head -1
复制代码


修改下,少几次循环,改下输出的格式

[ 本帖最后由 Minsic 于 2009-7-26 20:13 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP