mit Bash eine Textdatei sortieren?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet
sort -n -o deineDatei.sortiert deineDatei
Woher ich das weiß:Studium / Ausbildung – Studium in theoretischer Informatik (Master)

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ß! :)

Woher ich das weiß:Berufserfahrung

Wenn ich das richtig verstehe: Jede Zeile besteht aus einer Kette von Buchstaben, ge­folgt von einer Kette von Ziffern, gefolgt von einem Buchstaben und dann noch irgend­etwas. Wenn das zutrifft, dann funktioniert der folgende Trick, und zwar un­ab­hängig davon, welche (und wieviele) Buchstaben am Anfang stehen und wieviele Zif­fern dar­auf fol­gen (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 an­fängt) und schnei­den mit cut alles bis zum ersten Doppelpunkt in der Zeile wieder weg. Das Re­sul­tat landet am Standardoutput und kann natürlich umgeleitet werden.


stdio  30.06.2021, 18:01

Warum einfach, wenn man es auch kompliziert machen kann? ;)

0
indiachinacook  30.06.2021, 23:47
@stdio

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.

0