为下一个perl脚本寻找一个漂亮的(短而优雅的)衬垫:
use strict;
use warnings;
my %all;
while(<DATA>) {
chomp;
my ($name, $x, $path) = split /\s+/;
push @{$all{$path}}, $name;
}
foreach my $path (sort keys %all) {
my $cnt = scalar @{$all{$path}};
print "$path $cnt @{$all{$path}}\n" if $cnt > 1;
}
__DATA__
Atxt x a/b/c
Btxt x a/d/x
Ctxt x i/t/a
Dtxt x i/y/a
Etxt x i/t/a
Ftxt x a/d/x
Gtxt x a/d/x
ofc,单行应从STDIN读取,而不是从DATA读取。
简而言之,该脚本会读取3个字段(name
,x
,path
),并应以格式path dup_count name1 ... namex
输出重复路径的摘要。每个name
都不同。
所以,寻找类似的东西:
my_command | perl -F '\s+' -nle 'shorter_variant_of_the_above_script'
答案 0 :(得分:2)
可能有办法缩短这一点,但这是一次尝试:
perl -lane 'push@{$h{$F[2]}},$F[0]}{map{$n=@v=@{$h{$_}};print"$_ $n @v"if$n>1}keys%h'
使用提供的数据输出:
a/d/x 3 Btxt Gtxt Ftxt
i/t/a 2 Etxt Ctxt