最近在学习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更简单。