加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl – 排序一个巨大的文件

发布时间:2020-12-16 06:06:28 所属栏目:大数据 来源:网络整理
导读:我想要排序一个大约20M行的巨大文件: 团队名称升序 然后降到最高分. 所以我可以获得每支球队最高的得分手. 我想要考虑系统的资源.所以… 有没有办法在不将所有数据放入Perl中的哈希/数组的情况下执行此操作? 我们可以使用Unix / Linux排序实用程序执行此操
我想要排序一个大约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 /

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读