大文件的排序处理(多路归并)

排序文件:
1.txt:
@12@vip.com#20120307/1
BCDBCDBD
+
AAAAAAAA
@18@vip.com#20120307/1
BBDACCDA
+
AAAAAAAA
...
2.txt
@14@vip.com#20120307/1
AABCCCCD
+
AAAAAAAA
@12@vip.com#20120307/1
BCACACAD
+
AAAAAAAA
...
————————————————
结果:
@14@vip.com#20120307/1
AABCCCCD
+
AAAAAAAA
@18@vip.com#20120307/1
BBDACCDA
+
AAAAAAAA
@12@vip.com#20120307/1
BCACACAD
+
AAAAAAAA
@18@vip.com#20120307/1
BBDACCDA
+
AAAAAAAA
。。。。。
----------------------------------

1: 文件分块:
按照每部分的第二行, 前3个字符分块
BCDBCDBD -> B文件
CACACAD   -> C文件
AABCCCCD -> A文件
......

2: 排序
排序  A文件
排序  B文件
排序  C文件
......
-----------------------------------------------------------
 
-----------------------------------------------------------
#!/usr/bin/perl
my $head = 5;  # 或多或少
my %file;
@ARGV = qw/test.txt/;

while (<>) {
    my $line2 = <>;
    my $key = substr $line2, 0, $head;
    unless ( $file{$key} ) {
        open my $f, '>', "/tmp/$key";
        $file{$key} = $f;
    }
    print { $file{$key} } $_, $line2, <>.<>;
}

close $file{$_} for keys %file;
open my $result, '>', 'result';

for my $file ( sort keys %file ) {
    @ARGV = "/tmp/$file";
    my @group;
    push @group, [ $_, ~~<>, <>.<> ] while <>;
    print $result @$_ for sort { $a->[1] cmp $b->[1] } @group;
    unlink "/tmp/$file";
}

print scalar keys %file, ' files: BYE!';
——————————————————————————————————————————————
xargs -n4 < infile |sort -k2 |xargs -n1

 

转载于:https://www.cnblogs.com/huang6894/p/3472603.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值