优化unix搜索

时间:2012-11-29 23:08:33

标签: perl unix search optimization

我有20个500k行的文件,每行2个数字。 目标是获得不同对的百分比(A B)与每个A数的A数的总数。 因此,结果应该是这些文件中的A数和百分比。

例如:

  

1 1

     

1 1

     

1 1

     

1 2

应该给我1 50%(总共4 A中的2对不同)。

以下方式太慢了: 不同的数量

cat files | sort | uniq -c 

总数

cat files | cut -f1 | sort | uniq -c 

然后迭代这些结果并计算每个A数的百分比。

如何最好地优化查询(bash / perl)? 此外,如果仅对这些A数的子集进行此操作,如何优化它? (例如,对于20k A数,不是全部500k)

非常感谢提前

1 个答案:

答案 0 :(得分:1)

Perl解决方案。尝试将其作为script.pl files运行,看看速度有多快。

#!/usr/bin/perl
use warnings;
use strict;

my %hash;
while (<>) {
    my @nums = split;
    $hash{$nums[0]}{$nums[1]}++;
}

#for my $num (sort { $a <=> $b } keys %hash) {    
for my $num (keys %hash) {
    my @values = values %{ $hash{$num} };
    my $sum;
    $sum += $_ for @values;
    my $perc = 100 * @values / $sum;
    print "$num $perc%\n";
}

如果您希望输出按第一个数字排序,请取消注释sort行(并注释以下内容)。