mit Bash eine Textdatei sortieren?
Hi Community,
ich erstelle mit meinem Bash Script eine Textdatei die etwa so aussieht:
AB9991005CD
AB9991020CD
AB9991018CD
AB9990107CD
...
ich möchte diese Datei gerne so sortieren, dass die kleinste Zahl zwischen den Buchstaben am Anfang steht.
so dann...
AB9990107CD
AB9991005CD
AB9991018CD
AB9991020CD
Vielen Grüße und danke schon mal
3 Antworten
sort -n -o deineDatei.sortiert deineDatei
Einfach so:
sort -n -k1.3,1.9 input.txt >sorted.txt
Damit wird nur Zeichen 3 bis 9 (des ersten Feldes, was hierbei aber keine Rolle spielt) berücksichtigt und numerisch sortiert.
Für so einfache Anwendungsfälle brauchst du keine weiteren Tools wie sed & Co.
Viel Spaß! :)
Wenn ich das richtig verstehe: Jede Zeile besteht aus einer Kette von Buchstaben, gefolgt von einer Kette von Ziffern, gefolgt von einem Buchstaben und dann noch irgendetwas. Wenn das zutrifft, dann funktioniert der folgende Trick, und zwar unabhängig davon, welche (und wieviele) Buchstaben am Anfang stehen und wieviele Ziffern darauf folgen (es muß aber wenigstens eine Ziffer vorkommen):
sed 's/^[A-Za-z]*\([0-9][0-9]*\).*/\1:&/' filename | sort -n | cut -d: -f2-
Der sed-Befehl extrahiert die Zahl und schreibt jede Zeile foo123bar zu 123:foo123bar um. Dann sortieren wir einfach numerisch (weil jede Zeile mit einer Zahl anfängt) und schneiden mit cut alles bis zum ersten Doppelpunkt in der Zeile wieder weg. Das Resultat landet am Standardoutput und kann natürlich umgeleitet werden.
Ich hatte -k natürlich auch in Betracht gezogen, aber dann doch verworfen. In der Frage steht ja nicht explizit drin, ob es immer genau zwei Buchstaben am Zeilenanfang sind.
Warum einfach, wenn man es auch kompliziert machen kann? ;)