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