-1

如何在 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
4

2 回答 2

2

As above but in perl

perl -n -e 'use Data::Dumper;$a{$_}++; END { print Dumper(\%a)}' file
于 2013-09-06T15:10:03.737 回答
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";
}

显示这一点的现场演示提供了所需的输出。如果您的输入是文件,只需使用文件处理程序并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";
}
于 2013-09-06T15:35:53.063 回答