我必须使用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
答案 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;