linux-l: Perl (was: SOrtieren.)

Jens Dreger dreger at physik.fu-berlin.de
Mi Nov 24 08:58:05 CET 1999


On Tue, 23 Nov 1999, Holger Paulsen wrote:

> On Tue, Nov 23, 1999 at 04:00:44PM +0100, Jens Dreger wrote:
>  
> > 	perl -000 -e 'print sort <>;' file.dat
>  
> > 	perl -lpe 's/^\s*$//' file.dat | perl -000 -e 'print sort <>;'
> 
> Was um alles in der Welt bedeuten die Optionen, also das
> "-000" und das "-lpe" (na gut, das e ist mir inzwischen
> bekannt, und das "-000" bedeutet, so vermute ich, daß
> inhaltsleere Zeilen der Liste nicht angetastet werden
> sollen). Perl ist mächtig gewaltig, aber mir erscheint es
> auch etwas unzugänglich.

Man _muss_ ja nicht die kryptische Variante waehlen. Der Einzeiler saehe
ohne Optionen und lesbar ungefaehr so aus:
-----------------8<----------------------------
#!/usr/bin/perl   
 
$/="\n\n";      # dies war das -000
		# record-separator ist nun eine Leerzeile
@records = <>;  # gesamte Datei einlesen. $records[i] ist ein
		# Eintrag der Form:
		# \index[...] kjld dfkjldkj
		#                gjlfj lkgjkjg hdkfjg

@sorted  = sort @records;

print @sorted; 
-----------------------8<-----------------------


Das "perl -lpe 's/^\s*$//' file.dat" saehe ungefaehr so aus:
-----------------8<----------------------------
#!/usr/bin/perl

while($_ = <>) {	# gehoert zu -p
    chomp $_;		# erster Teil von -l, naemlich die Returns
			# automatisch wegzunehmen.
    $_ =~ s/^\s*$//;	# ersetze whitespace durch nichts
    $_ .= $/;		# zweiter Teil von -l, Returns vor der Ausgabe
			# wieder ranhaengen
    print $_;		# gehoert zu -p
}
-----------------8<----------------------------

Die $_'s kann man natuerlich weglassen. Das -l in perl -lpe 's/^\s*$//'
verhindert, dass s/^\s*$// auch die Returns am Ende der Zeile killt, weil
sie ja vorher "weggerettet" wurden. Man koennte genausogut schreiben:
perl -pe 's/^\s*$/\n/'. Dann wird eben alles whitespace+\n durch \n
ersetzt.

Hoffe, alle Klarheiten sind damit nun beseitigt. ;)

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