Mailinglist Archive: opensuse-de (2118 mails)

< Previous Next >
Re: Bash: Einen Satz sortieren
  • From: "Dr. Jürgen Vollmer" <Juergen.Vollmer@xxxxxxxxxxxxxxxxxxxxx>
  • Date: Fri, 26 Aug 2005 22:52:10 +0200
  • Message-id: <200508262252.19529.Juergen.Vollmer@xxxxxxxxxxxxxxxxxxxxx>
Am Freitag, 26. August 2005 21:16 schrieb Al Bogner:
> Am Freitag, 26. August 2005 20:33 schrieb Dr. Jürgen Vollmer:
> > > > Wie erreiche ich effizient folgendes:
> > > >
> > > > var="Diese Worte sollten sortiert werden"
> > > >
> > > > varsortiert="Diese sollten sortiert werden Worte"
> > >
> > > Ich hätte nun eine Zusatzfrage:
> > >
> > > Wie schließe ich bestimmte Worte aus der Sortierung aus:
> > >
> > > Die ursprüngliche Variable hat keine Leerzeichen, sondern trennt die
> > > Worte mit _, wobei ich dann _ durch Leerzeichen ersetzen lasse.
> > >
> > > Wenn das _letzte_ Wort nun "_xy" bzw. nach der Ersetzung " xy" heißt
> > > oder "_yz", dann soll diese beiden Worte nicht in der Sortierung
> > > berücksichtigt werden.
> > >
> > > Ich könnte nun vor der nach der Sortierung löschen. Was schlagt ihr
> > > vor? Mit sed?
> >
> > dann besser gleich mit sed:
> >
> > varsortiert=`echo $var | sed -e 's/_xy$//' -e 's/_/\n/g' | sort -f`
>
> EInes ist mir noch syntaktisch unklar, wie ich mit sed in *1* Pipe
> _zuerst_ alle _ durch Leerzeichen ersetze und dann alle _xy und _yz am Ende
> durch nichts.

sed arbeitet die Kommandos in der angegeben Reihenfolge für jede Zeile ab.
also zuerst _xy am Zeilenende durch nichts ersetzen, dann all _ durch ein
blank. So einfach :-)

> Außerdem habe ich noch folgende Pipe verwendet um eventuell
> auftretende Leerzeichen am Anfang (kommt eher nicht vor) und am Ende sicher
> zu löschen:
> | sed 's/^ *//' | sed 's/ *$//'`

ist kein separates sed nötig, es reicht eingach noch mehr sed-Kommandos
anzugeben:

varsortiert=`echo $var | \
sed -e 's/^ *//' -e 's/ *$// -e 's/_xy$//' -e 's/_/\n/g' | sort -f`

> Oder ist es besser mehrere Pipes zu verwenden? Syntaktisch sind für mich
> mehrere Pipes leichter zu lesen und die Performance dürfte bei einer
> Variable mit 100 Zeichen vernachlässigbar sein.
man kann's ja auch so schreiben:

varsortiert=`echo $var | \
sed -e 's/^ *//' \
-e 's/ *$//' \
-e 's/_xy$//' \
-e 's/_/\n/g' |\
sort -f`

ist doch einfach zu lesen oder?

Bye
Jürgen

--
Dr.rer.nat. Juergen Vollmer, Viktoriastrasse 15, D-76133 Karlsruhe
Tel: +49(721) 92 04 87 1 Fax: +49(721) 92 04 87 2
Juergen.Vollmer@xxxxxxxxxxxxxxxxxxxxx
www.informatik-vollmer.de
Internet-Telefonie: www.skype.com Benutzer: juergen.vollmer
< Previous Next >
Follow Ups