逐行比较并报告出现次数

时间:2013-09-06 15:04:27

标签: perl

如何在perl中编写一个程序来逐行比较,报告该行及其发生?

A    4481676    4483063
A    4481676    4483063
A    4481676    4483063
A    4481676    4483063
A    4483214    4483749
A    4483214    4483749
A    4483214    4483749
A    4483214    4483749
A    4483214    4483749
A    4483214    4483749

打印此输出

A    4481676    4483063   4
A    4483214    4483749   6

2 个答案:

答案 0 :(得分:2)

如上所述,但在perl中

perl -n -e 'use Data::Dumper;$a{$_}++; END { print Dumper(\%a)}' file

答案 1 :(得分:2)

如果您不想使用单行代码执行此操作:

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

my $input = "
A    4481676    4483063
A    4481676    4483063
A    4481676    4483063
A    4481676    4483063
A    4483214    4483749
A    4483214    4483749
A    4483214    4483749
A    4483214    4483749
A    4483214    4483749
A    4483214    4483749";

my %seen;

while($input =~ /(.+)$/mg ){
    $seen{$1}++;
}

foreach my $key (keys %seen) {
    print "$key   $seen{$key}\n";
}
显示此项的

Live demonstration可提供所需的输出。如果您的输入是文件,只需使用文件处理程序并while(<>)代替while($input =~ /(.+)$/mg )

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

my $file="file.txt";
open(DATA, "<" . $file);
my %seen;

while(<DATA>){
    $seen{$1}++;
}

foreach my $key (keys %seen) {
    print "$key   $seen{$key}\n";
}