Unix power tools

Nikos Kanellopoulos nkan at panafonet.gr
Thu Jul 29 13:09:25 EEST 2004


Giorgos Keramidas wrote:
> "May the Perl-force be with you."
> 
> Μετάφραση...
> 
> Για να μπορείς να κάνεις ένα μόνο pass στα δεδομένα του logfile, μπορείς
> να χρησιμοποιήσεις ένα hash table το οποίο θα έχει σαν keys τα port numbers.
> 
>       #!/usr/bin/perl -w
> 
>       use strict;
> 
>       my ($k, $line, $port, $total, %stats);
> 
>       while (defined($line = <STDIN>)) {
>           chomp $line;
>           $port = $line;
>           $port =~ s/^.*DPT=(\d+)\D*.*$/$1/;
>           if (defined($stats{$port})) {
>               $stats{$port}++;
>           } else {
>               $stats{$port} = 1;
>           }
>       }
> 
>       print " PORT HITS\n";
>       $total = 0;
>       foreach $k (sort {$a <=> $b} keys(%stats)) {
>           printf "%5d %d\n", $k, $stats{$k};
>           $total += $stats{$k};
>       }
>       print "\n";
>       print "Total: $total\n";
> 
> 

Γιώργο σίγουρα η δική σου εκδοχή είναι 6-7 φορές πιο γρήγορη, αλλά
ο χρόνος είναι ούτως ή άλλως τόσο μικρός που η διαφορά δύσκολα μπορεί
να μετρηθεί.
Στις μέρες μας συχνά ο χρόνος του προγραμματιστή είναι πιο σημαντικός
από τον χρόνο του επεξεργαστή... Γι' αυτό προτίμησα την εκδοχή με 5 
γραμμές κώδικα. Τώρα όμως που το έγραψες εσύ, θα το χρησιμοποιώ :-)

Πάντως βλέπω ότι έχεις καλές συνήθειες (προγραμματιστικές)  :-)
Ακόμη, το δικό σου μου θυμίζει πολύ το word count πρόγραμμα στο βιβλίο 
του Stroustrup (TCPPPL)




More information about the Linux-greek-users mailing list