LC_COLLATE Wert für numerische Sortierung?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Quilmes
Beiträge: 87
Registriert: 11.04.2008 23:25:52

LC_COLLATE Wert für numerische Sortierung?

Beitrag von Quilmes » 15.02.2010 13:20:18

Im Verzeichnis test befinden sich folgende Unterverzeichnisse:

Code: Alles auswählen

$ cd test
$ echo *
10_j 11_k 12_l 1_a 2_b 3_c 4_d 5_e 6_f 7_g 8_h 9_i
Verantwortlich für die Sortierreihenfolge scheint die Variable LC_COLLATE zu sein. Gibt es einen Wert für diese Variable um die Ausgabe numerisch zu sortieren, also 1_a 2_b ... 9_i 10_j ... 12_l?
Die deutsche Rechtschreibung ist Freeware, d.h. Du darfst sie kostenlos nutzen. Allerdings ist sie keine freie Software, d.h. Du darfst sie nicht ändern oder in veränderter Form weitergeben.

Benutzeravatar
Meillo
Moderator
Beiträge: 9254
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: LC_COLLATE Wert für numerische Sortierung?

Beitrag von Meillo » 16.02.2010 00:24:04

Quilmes hat geschrieben: Verantwortlich für die Sortierreihenfolge scheint die Variable LC_COLLATE zu sein.
Ja.
Gibt es einen Wert für diese Variable um die Ausgabe numerisch zu sortieren, also 1_a 2_b ... 9_i 10_j ... 12_l?
Habe nie davon gehört. Sortiert wird AFAIK zeichenweise nach der Reihenfolge in einem Charset.

So geht's:

Code: Alles auswählen

ls | sort -n

Grundsätzlich solltest du die Zahlen aber in einer festen Breite kodieren, dann hast du das Problem nicht. Zum Umbenennen:

Code: Alles auswählen

for i in *_* ; do
  mv "$i" "`echo $i | awk -F_ '{printf("%03d_%s", $1, $2)}'`"
done
Use ed once in a while!

Antworten