-5

複数のファイルにまたがる一意の行を数えたいと思います。

f1.txt

2039-177 GRAPE
2039-177 GRAPE
2039-176 GRAPE
2039-176 GRAPE
234-450  APPLE

f2.txt

690-346 MANGO
690-346 MANGO
347-348 GRAPE
4350-350 MANGO

必要な出力

Total no:of grapes  - 3
Total no:of mangoes - 2
Total no:of apples  - 1
4

2 に答える 2

2

純粋なパール:

$ perl -lane '$seen{$_}++ or ++$n{lc $F[1]};
  END{print "Total no:of ${_}s - $n{$_}"
        for sort { $n{$b} <=> $n{$a} } keys %n}' f1.txt f2.txt
Total no:of grapes - 3
Total no:of mangos - 2
Total no:of apples - 1

パイプライン:

$ cat f1.txt f2.txt | uniq | \
  perl -lanE '++$n{lc$F[1]};END{say"Total no:of ${_}s - $n{$_}"for keys%n}' | \
  sort -nrk5
Total no:of grapes - 3
Total no:of mangos - 2
Total no:of apples - 1
于 2013-03-11T10:50:02.990 に答える
0

もしかしてこういうこと?(未テスト)

このソリューションでは、コマンド ラインのパラメーターとして入力ファイルの名前が必要です。

use strict;
use warnings;

use List::Utils 'max';

my %count;
$count{ (split)[1] }++ while <>;

my $len = 1 + max map length, keys %count;

for (keys %count) {
    printf "Total no:of %-*s - %d\n", $len, lc $_.'s', $count{$_};
}
于 2013-03-11T09:06:20.260 に答える