如何在perl中打印不同的模式及其计数?

时间:2015-01-29 16:56:08

标签: perl

我必须使用Perl打印不同的模式及其计数,数组将具有以下输入:

xe-0/0/0
xe-0/0/1
xe-0/0/2
xe-0/0/3
xe-0/1/0
xe-0/1/1
pf-0/0/0
pf-0/0/1
xt-0/1/0
输出应该是:

xe-0/0 has 4 interface
xe-0/1 has 2 interface
pf-0/0 has 2 interface
xt-0/1 has 1 interface

1 个答案:

答案 0 :(得分:1)

在' /'之前循环通过最长子字符串上的输入匹配并保持%h中的出现次数。完成处理后,打印按降序排序的计数。

perl -ne '$h{$1}++ if /(.*)\//; END { print "$_ has $h{$_} interface\n" for sort { $h{$b} <=> $h{$a} } keys %h; }' in

my %h; 
while (defined($_ = <ARGV>)) {
    ++$h{$1} if m[(.*)/];
}
print "$_ has $h{$_} interface\n" 
   for sort {$h{$b} <=> $h{$a};} keys %h;