perl – 排序一个巨大的文件
发布时间:2020-12-16 06:06:28 所属栏目:大数据 来源:网络整理
导读:我想要排序一个大约20M行的巨大文件: 团队名称升序 然后降到最高分. 所以我可以获得每支球队最高的得分手. 我想要考虑系统的资源.所以… 有没有办法在不将所有数据放入Perl中的哈希/数组的情况下执行此操作? 我们可以使用Unix / Linux排序实用程序执行此操
我想要排序一个大约20M行的巨大文件:
>团队名称升序 所以我可以获得每支球队最高的得分手. 我想要考虑系统的资源.所以… >有没有办法在不将所有数据放入Perl中的哈希/数组的情况下执行此操作? 如果是这样,你能告诉我该怎么做吗? 我的输入文件将是以下格式的大约20M行 Chicago Bulls|Michael Jordan|38 LA Lakers|Kobe Bryant|32 Chicago Bulls|Steve Kerr|16 LA Lakers|Paul Gasol|20 LA Lakers|Shaquile ONeal|19 Chicago Bulls|Scottie Pippen|23 . . . 解决方法
你不需要排序.
#!/usr/bin/perl use warnings; use strict; my %high_score; while (<DATA>) { chomp; my ($team_name,$player,$score) = split(/|/); for ($high_score{$team_name}{$player}) { $_ = $score unless $_ && $_ > $score } } for my $team_name (sort keys %high_score) { my %team_scores = %{ $high_score{$team_name} }; my @top_players = sort { $team_scores{$b} <=> $team_scores{$a} } (keys %team_scores); my $n = 0; for my $player (@top_players) { print "$team_name,$player high score: $team_scores{$player}n"; last if ++$n >= 2; } } __DATA__ Chicago Bulls|Michael Jordan|38 Chicago Bulls|Scottie Pippen|23 Chicago Bulls|Poor Joe|10 Chicago Bulls|Steve Kerr|16 LA Lakers|Kobe Bryant|32 LA Lakers|Paul Gasol|20 LA Lakers|Shaquile ONeal|19 编辑:(1)更新要求(2)s / while / for / (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |