2016-05-25 18 views
0

ich die Höhe der Zeit jede Zeile tritt in einer DateiPerl-Skript zählen Nummer jedes Vorkommen in einer Spalte

Bei einer Spalte von Informationen wie

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 

Ich möchte zählen möchten etwas erhalten wie

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 

ich habe Art einige unvollendete Code wie

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

Ich glaube, Sie Hilfe suchen sollten Ihre bestehenden Code zu verbessern, damit es funktioniert. Es ist nicht so weit weg, aber Sie mischen Python-Syntax in ein Perl-Programm, und das Ergebnis wird nicht kompilieren. Welche Sprachen kennen Sie? Wie würden Sie es vorziehen, eine Antwort zu formulieren? – Borodin

Antwort

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 

oder

$ 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 

ersetzen sort mit sort { $h{$b} <=> $h{$a} || $a cmp $b } die Ausgabe zu sortieren Zählung wird absteigend.

0

ich tun würde:

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" 
} 
Verwandte Themen