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