PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : sortieren nach string-länge



inge
17-07-2007, 19:25
ich will die zeilen einer datei nach der zeilenlänge sortieren (bash)

cat datei|sort
"sort" sortiert ja leider nur alphabetisch oder numerisch, oder?

BLUESCREEN3D
18-07-2007, 00:51
Du könntest die Länge jeder Zeile an den Anfang der Zeile schreiben, das ganze sortieren und die Zeilenlängen wieder entfernen:

while read line; do
echo "$(echo -n "$line" | wc -c) $line"
done | sort -n | cut -d ' ' -f 2-

jan61
18-07-2007, 22:09
Du könntest die Länge jeder Zeile an den Anfang der Zeile schreiben, das ganze sortieren und die Zeilenlängen wieder entfernen:

while read line; do
echo "$(echo -n "$line" | wc -c) $line"
done | sort -n | cut -d ' ' -f 2-

Als Alternative awk, damit braucht man nicht je Zeile einen eigenen wc aufzurufen:
awk ' { print length($0),$0; } ' $DATEI | sort -n | cut -d' ' -f2- Das sollte sich besonders bei großen Dateien positiv auf die Performance auswirken, außerdem kann man innerhalb des awk noch nützliche Dinge tun, wie Leerzeichen abschneiden usw.

Jan

inge
19-07-2007, 12:05
ah, darauf bin ich noch garnicht gekommen, habe die ganze zeit nur krampfhaft versucht nen befehl zu finden.
ich danke euch!