免费注册 查看新帖 |

Chinaunix

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

如何对100百万行的字符串得到唯一字符串及计数? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-11-16 19:44 |只看该作者 |倒序浏览
我有100百万行的字符串,约150的长度, 里面有一些是重复的字符串
现在想得到最终的去除重复后的字符串及每个字符串出现的次数. perl中有什么快速的算法吗?
google了下面的方法,不过速度也不快.
http://www.experts-exchange.com/ ... ous/Q_22722019.html

下面是对50百万行的日志进行计数:
open(F,"logfile.log");
open(TMP,">temp.log");
while (<F>) {
  @data = split(/\t/,$_);   # logfile is tab-separated
  print TMP $data[5]."\n";     # ID is in the 6th column
}
close(F);
close(TMP);

$unique = `sort temp.log | uniq | wc -l`;
print "There are ".$unique." user ID's in the log file";

论坛徽章:
0
2 [报告]
发表于 2010-11-16 20:25 |只看该作者
100W行不算太大,可以用hash.
如果觉得太大,那就用数据库,然后group by。

论坛徽章:
0
3 [报告]
发表于 2010-11-16 20:34 |只看该作者
在本版又是`sort`又是`uniq`的,我perl雄风何在?


$ cat 1.txt
iii sfsdf sfdsf kkk 123 abc 456
iii isfsf fdsfe kkk 123 xyz 456
xxx xcfxs 23424 kkk 123 xyz 999
xxx xcfxs jljlj kkk 123 abc 999
zzz xcfxs xcvxv kkk 123 def 333
sdf xcfxs 23424 kkk 123 sdk 333
zzz xcfxs 08008 kkk 123 sdk 993


$ cat t1.pl
use strict;

my %hash;
open my $fd,"1.txt" or die $!;
while(<$fd>) {
    next unless /^(\S+\s+){5}(\S+)/;
    $hash{$2} ++;
}
close $fd;

print scalar keys %hash;

论坛徽章:
0
4 [报告]
发表于 2010-11-16 20:43 |只看该作者
再差也要整个ruby实现~~

  1. hash = Hash.new(0)

  2. File.open("1.txt").each do |c|
  3.    hash[$2] +=1 if c =~ /^(\S+\s+){5}(\S+)/
  4. end

  5. puts hash.keys.size
复制代码

论坛徽章:
0
5 [报告]
发表于 2010-11-16 21:12 |只看该作者
在本版又是`sort`又是`uniq`的,我perl雄风何在?
兰花仙子 发表于 2010-11-16 20:34



    仙子好凶峰,ruby看不懂~

论坛徽章:
1
未羊
日期:2014-09-08 22:47:27
6 [报告]
发表于 2010-11-16 21:15 |只看该作者
我有100百万行的字符串,约150的长度, 里面有一些是重复的字符串
现在想得到最终的去除重复后的字符串及每个 ...
yisn 发表于 2010-11-16 19:44



    注意,楼主是100百万行,也就是上亿条的数量级。

论坛徽章:
0
7 [报告]
发表于 2010-11-16 21:18 |只看该作者
回复 6# wxlfh


   其实看是看文件,要是重复的多的话,内存也不会太大吧

论坛徽章:
0
8 [报告]
发表于 2010-11-16 21:51 |只看该作者
如果日志实在太大,是不可以考虑把它分割成两三份,然后逐个读入hash,之后再对分别输出的文档再hash一次?
可能这方法有点笨,但效率应该能提高吧~

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
9 [报告]
发表于 2010-11-16 22:14 |只看该作者
本帖最后由 zhlong8 于 2010-11-16 22:17 编辑

md5应该没150那么长吧

胡乱联想下

论坛徽章:
0
10 [报告]
发表于 2010-11-17 08:56 |只看该作者
我perl雄风何在?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP