用于计算列中每次出现次数的 Perl 脚本
Perl script to count number of each occurrence in a column
我想统计文件中每一行出现的次数
给定一列信息,例如
cat woman and bain
bat man
hat woman
cat man
bat man and friends
fat man
hat woman
+bat man
cat woman and bain
super bat man
bat man
bat man
我想收到类似
的东西
2 cat woman and bain
3 bat man
2 hat woman
1 cat man
1 bat man and friends
1 fat man
1 +bat man
1 super bat man
我有一些未完成的代码,比如
open OUTFILE, '>text.txt';
while (<>){
if( text.txt =~ $_ ){
#increment the count for this occurence
}else{
print OUTFILE $_;
}
}
$ sort file | uniq -c
1 +bat man
3 bat man
1 bat man and friends
1 cat man
2 cat woman and bain
1 fat man
2 hat woman
1 super bat man
或
$ perl -e'
++$h{$_} while <>;
printf "%7d %s", $h{$_}, $_ for sort keys(%h);
' file
1 +bat man
3 bat man
1 bat man and friends
1 cat man
2 cat woman and bain
1 fat man
2 hat woman
1 super bat man
将 sort
替换为 sort { $h{$b} <=> $h{$a} || $a cmp $b }
以对输出进行降序排序。
我会做:
open INFILE, "<", "input.txt";
open OUTFILE, "+>", "output.txt";
my %hash;
foreach my $line (<INFILE>){
chomp $line; # Remove trailing newline
$hash{$line}++;
}
while (my($key,$val) = each %hash) {
print OUTFILE "$val - $key"
}
我想统计文件中每一行出现的次数
给定一列信息,例如
cat woman and bain
bat man
hat woman
cat man
bat man and friends
fat man
hat woman
+bat man
cat woman and bain
super bat man
bat man
bat man
我想收到类似
的东西2 cat woman and bain
3 bat man
2 hat woman
1 cat man
1 bat man and friends
1 fat man
1 +bat man
1 super bat man
我有一些未完成的代码,比如
open OUTFILE, '>text.txt';
while (<>){
if( text.txt =~ $_ ){
#increment the count for this occurence
}else{
print OUTFILE $_;
}
}
$ sort file | uniq -c
1 +bat man
3 bat man
1 bat man and friends
1 cat man
2 cat woman and bain
1 fat man
2 hat woman
1 super bat man
或
$ perl -e'
++$h{$_} while <>;
printf "%7d %s", $h{$_}, $_ for sort keys(%h);
' file
1 +bat man
3 bat man
1 bat man and friends
1 cat man
2 cat woman and bain
1 fat man
2 hat woman
1 super bat man
将 sort
替换为 sort { $h{$b} <=> $h{$a} || $a cmp $b }
以对输出进行降序排序。
我会做:
open INFILE, "<", "input.txt";
open OUTFILE, "+>", "output.txt";
my %hash;
foreach my $line (<INFILE>){
chomp $line; # Remove trailing newline
$hash{$line}++;
}
while (my($key,$val) = each %hash) {
print OUTFILE "$val - $key"
}