Sortieren mit Perl...

Florian Lohoff flo at rfc822.org
Wed Jan 26 12:32:16 CET 2000


On Wed, Jan 26, 2000 at 07:37:45AM +0100, Tobias Lachmann wrote:
> Hallo!
> 
> Ich sortiere gerade ein Logfile, es enthält verschiedene Einträge:
> 
> UserGD;9;0;1.0
> UserCX;5;0;1.0
> UserGF;3;9;0.25
> UserSA;6;4;0.6
> usw.....

Du packst dir das erstmal in ein hash ..

foreach (<STDIN>) {
	my @f=split(/;/,$_);
	$hash{$f[0]}{$f[1]}{$f[2]}{$f[3]}=1;
}

> ich möchte jetzt folgende Sortierung vornehmen:
> 
> 1. Kriterium: Spalte 4, Absteigend
> 2. Kriterium: Spalte 2, Absteigend
> 3. Kriterium: Spalte 1, Aufsteigend

Dann sortieren bzw sortiert ausgeben ...

foreach $user ( sort keys %hash ) {
    foreach $col1 ( sort keys ${ $hash{$user} } ) {
        foreach $col2 ( sort keys ${ $hash{$user}{$col1} } ) {
            foreach $col3 ( sort keys ${ $hash{$user}{$col1}{$col2} } ) {
	    	print "$user;$col1;$col2;$col3\n";
            }
        }
    }
}

Fuer reverse sort oder selbstgebastelte sortierroutinen
solltest du dir mal "man perlfunc" ansehen ...

Im prinzip geht das so ...

sort { $b <=> $a } 

anstatt dem "sort" in den foreach zeilen - Dann sollte
das reverse sein ... Ich weiss nicht inwieweit sort 
mit rationalen zahlen umgehen kann -> ausprobieren
sonst eigene routine schreiben.

Flo
-- 
Florian Lohoff		flo at rfc822.org		      	+49-5241-470566
"Technology is a constant battle between manufacturers producing bigger and
more idiot-proof systems and nature producing bigger and better idiots."




More information about the Linux mailing list