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@informatik-vollmer.de www.informatik-vollmer.de Internet-Telefonie: www.skype.com Benutzer: juergen.vollmer