perl – 排序一个巨大的文件

前端之家收集整理的这篇文章主要介绍了perl – 排序一个巨大的文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想要排序一个大约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 /

猜你在找的Perl相关文章