如何在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
答案 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";
}