2016-05-25 3 views
0

Я хочу, чтобы подсчитать количество раз, каждая строка встречается в файлеPerl скрипт для подсчета числа каждого вхождения в колонке

Учитывая столбец информации, как

cat woman and bain 
bat man 
hat woman 
cat man 
bat man and friends 
fat man 
hat woman 
+bat man 
cat woman and bain 
super bat man 
bat man 
bat man 

Я хочу, чтобы получить что-то как

2 cat woman and bain 
3 bat man 
2 hat woman 
1 cat man 
1 bat man and friends 
1 fat man 
1 +bat man 
1 super bat man 

я вроде есть какой-то незаконченный код как

open OUTFILE, '>text.txt'; 
while (<>){ 
     if(text.txt =~ $_){ 
       #increment the count for this occurence 
     }else{ 
       print OUTFILE $_; 
     } 
} 
+1

Я думаю, вы должны обратиться за помощью, чтобы улучшить существующий код так, что он работает. Это далеко не так, но вы смешиваете синтаксис Python в Perl-программе, и результат не будет компилироваться. Какие языки вы знаете? Как бы вы предпочли, чтобы ответ был сформулирован? – Borodin

ответ

5
$ sort file | uniq -c 
     1 +bat man 
     3 bat man 
     1 bat man and friends 
     1 cat man 
     2 cat woman and bain 
     1 fat man 
     2 hat woman 
     1 super bat man 

или

$ perl -e' 
    ++$h{$_} while <>; 
    printf "%7d %s", $h{$_}, $_ for sort keys(%h); 
' file 
     1 +bat man 
     3 bat man 
     1 bat man and friends 
     1 cat man 
     2 cat woman and bain 
     1 fat man 
     2 hat woman 
     1 super bat man 

Заменить sort с sort { $h{$b} <=> $h{$a} || $a cmp $b } для сортировки на выходе будет по убыванию кол.

0

Я хотел бы сделать:

open INFILE, "<", "input.txt"; 
open OUTFILE, "+>", "output.txt"; 
my %hash; 
foreach my $line (<INFILE>){ 
    chomp $line; # Remove trailing newline 
    $hash{$line}++; 
} 

while (my($key,$val) = each %hash) { 
    print OUTFILE "$val - $key" 
}