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