2013-03-11 4 views
-4

Я хотел бы рассчитывать на уникальные линии через несколько файлов:подсчитать общее число строк в столбце

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 

ответ

0

Возможно, что-то подобное? (Untested.)

Это решение ожидает имена входных файлов в качестве параметров в командной строке.

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{$_}; 
} 
2

Pure Perl:

$ 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 

Pipeline:

$ 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 
Смежные вопросы