最近在学习Perl,看到论坛上有人问问题,就用Perl实现了写在这里,呵呵。

#!/usr/bin/perl -w
# 一个文件里有若干行记录,有些记录行是重复的,求出现频率最高的10条记录。


my $offset = 0;
my $len = 10;

my %hash;
while(<>){
chomp;
$hash{$_}++;
}

if($len > keys %hash){
$len = keys %hash;
}

my @sorted = reverse sort { $hash{$a} <=> $hash{$b} } keys %hash;

foreach (splice(@sorted, $offset, $len)) {
print "$hash{$_}: $_\n";
}


awk版本的也记录在这吧(作者diginto@newsmth):

cat test.txt | awk '{c[$0]++} END{for(i in c)print c[i]"\t"i}' | sort -nr | head -n10 | cut -f2-


cppgx@newsmth说,其实用uniq -c更简单。

Posted on 2008-11-23 17:27  Soli  阅读(539)  评论(0编辑  收藏  举报