Ich benötige in einer Datei die Zeilen nach der Zeilenlänge sortiert, aber sort schafft das nicht :(
Wie bekommt man das Sortieren nach Zeilenlänge am Einfachsten realisiert? :confused:
Druckbare Version
Ich benötige in einer Datei die Zeilen nach der Zeilenlänge sortiert, aber sort schafft das nicht :(
Wie bekommt man das Sortieren nach Zeilenlänge am Einfachsten realisiert? :confused:
Suchmaschine: sort line length
Ok. In deutsch hatte ich gesucht, aber nichts gefunden.
Mein Vorschlag:
1. Feststellen der Zeilenlänge und Abspeichern derselben VOR der jeweiligen Zeile. Für die Darstellung der Länge genügen 4 Dezimalziffern (was bedeutet, d.h. die maximale Zeilenlänge der Datei nicht größer als 9999 Bytes sein darf. Andernfalls Längenangabe im nachstehenden Skript einfach anpassen.)
2. Sortieren der erweiterten Datei. Da die Längenangabe VOR jeder Zeile steht, braucht es keine weiteren Angaben beim "sort"
3. Abstrippen der Längenangabe: Das gewünschte Ergebnis steht zur Verfügung.
Skript (Beispiel):
cat $datei | \
awk -F" " '{ printf("%04d%s\n",length($0),$0) }' | \
sort | \
awk -F" " '{ printf("%s\n",substr($0,5)) }' > datei-sortiert
Hinweis: "substr($0,5)" bedeutet: Ab Position 5 bis Zeilenende, d.h. die ersten vier Bytes (Längenangabe) werden ignoriert.
Gruss
Dieter