用于计算列中每次出现次数的 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"
}