linux-l: SOrtieren.
Jens Dreger
dreger at physik.fu-berlin.de
Mi Nov 24 08:35:46 CET 1999
On Tue, 23 Nov 1999, Carsten Wartmann wrote:
> Jens Dreger writes:
> > On Tue, 23 Nov 1999, Carsten Wartmann wrote:
> > > hat jemand von Euch Perl/Python/Script/bash Experten eine Idee wie man
> > > eine Datei die wie folgt aussieht, alphabetisch sortieren kann:
> > >
> > Oh wie schoen, wieder was fuer Perl-Minimalisten ;-)
> >
> > perl -000 -e 'print sort <>;' file.dat
>
> Er war länger aber schneller ;-)
Wie kommst Du auch dazu, eine Frage zu posten, wenn ich nicht online bin
;-)
> Problem ist mit einem Mehrzeiler schon gelöst ;-)
Habe ich gesehen. Konnte mich trotzdem nicht zurueckhalten. Durch diese
mail von Dir aufgeschreckt (weil ich das "schneller" erst auf den
Porgramm-Code bezogen habe), habe ich mir das noch mal kurz angeschaut.
Das Ergebnis ist _sehr_ seltsam: Bei einer ca. 5MB grossen Datei bekomme
ich
2:51 fuer perl -000 -e 'print sort <>;'
5.15 fuer Robert's Mehrzeiler
(und jetzt kommt's)
2.37 fuer perl -lpe 's/^\s*$//' carsten.dat | \
perl -000 -e 'print sort <>;'
Sprich, durch hinzufuegen eines weiter Programmes in die Pipe wird es
schneller. Jemand erklaere mir das.
Aber damit hier auch noch irgendetwas steht, was Dich auch _interessieren_
koennte: Der Mehrzeiler von Robert macht alle Doppeleintraege platt ! Es
reicht dabei, dass es zwei gleiche \index[someword] Eintraege gibt. Nur
der letzte ueberlebt. Das ist nicht unbedingt das Verhalten, das man von
einer Sortierroutine erwartet. Der Grund liegt in der Zeile
$all{$1} = $line;
Existiert bereits ein Eintrag mit key $1, wird er einfach ueberschrieben.
Das Problem laesst sich folgendermassen beheben:
$all{$1} = $line; -> push @{$all{$1}}, $line;
print $all{$key}; -> print @{$all{$key}};
Die Performance sackt dadurch auf 6.08 ab ;-)
Gruss,
Jens.
____________________________________________________________________________
Jens Dreger | Freie Universitaet Berlin
Cauerstrasse 35a | Fachbereich Physik, WWW Administration
10587 Berlin | Arnimallee 14, 14195 Berlin
Tel: (030)342-3616 | Tel.: (030)838-4774
jens.dreger at physik.fu-berlin.de | webadmin at physik.fu-berlin.de
Frueher war alles anders, warum soll da nicht heute auch alles anders sein ?
Mehr Informationen über die Mailingliste linux-l