我想要排序一个大约20M行的巨大文件:
>团队名称升序
>然后降到最高分.
所以我可以获得每支球队最高的得分手.
我想要考虑系统的资源.所以…
>有没有办法在不将所有数据放入Perl中的哈希/数组的情况下执行此操作?
>我们可以使用Unix / Linux排序实用程序执行此操作吗?
如果是这样,你能告诉我该怎么做吗?
我的输入文件将是以下格式的大约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 /