[gelöst] debian bash script sort in txt file

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
joe2017
Beiträge: 1274
Registriert: 07.08.2017 14:29:51

[gelöst] debian bash script sort in txt file

Beitrag von joe2017 » 31.10.2024 13:01:10

Hallo zusammen,

wahrscheinlich ist es ganz einfach, aber ich finde nichts zu dem Thema.
Ich hab eine Datei die wie folgt aufgebaut ist:

Code: Alles auswählen

hans;maier;abc;online;date
jürgen;staab;abc;offline;date
marc;fritz;abc;online;date
franz;müller;abc;online;date
steffan;müller;abc;offline;date
fritz;glaab;abc;online;date
Ich möchte die Datei so sortieren, dass die zeilen mit offline immer oben stehen.
Wie kann ich das am einfachsten realisieren?

VIelen Dank!
Zuletzt geändert von joe2017 am 06.11.2024 11:56:20, insgesamt 3-mal geändert.

diggerchen
Beiträge: 115
Registriert: 15.01.2005 22:35:26

Re: debian bash script sort in txt file

Beitrag von diggerchen » 31.10.2024 13:20:06

So?

Code: Alles auswählen

sort -t ";" -k 4 liste.txt

Benutzeravatar
joe2017
Beiträge: 1274
Registriert: 07.08.2017 14:29:51

Re: debian bash script sort in txt file

Beitrag von joe2017 » 31.10.2024 14:29:28

Super!
Kann ich das auch dirkt in der aktuellen Datei sortieren? Oder muss ich das in eine neue Datei schreiben?

Benutzeravatar
heisenberg
Beiträge: 4123
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

sponge: Quelldatei lesen und neuschreiben

Beitrag von heisenberg » 31.10.2024 14:48:01

Das geht mit sponge aus Debianmoreutils:

Code: Alles auswählen

$ whatis sponge
sponge (1)           - soak up standard input and write to a file

Code: Alles auswählen

sort quelldateidatei | sponge quelldatei
Zuletzt geändert von heisenberg am 31.10.2024 14:50:30, insgesamt 1-mal geändert.

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

Re: debian bash script sort in txt file

Beitrag von Meillo » 31.10.2024 14:49:59

joe2017 hat geschrieben: ↑ zum Beitrag ↑
31.10.2024 14:29:28
Kann ich das auch dirkt in der aktuellen Datei sortieren? Oder muss ich das in eine neue Datei schreiben?
Bei sort(1) geht das ausnahmeweise, da sort(1) zuerst den kompletten Input lesen muss bevor es die Ausgabe schreibt. Siehe dazu die Option `-o'.

Wichtig: *Keinesfalls* die Ausgabe mit `>' umleiten, weil die Ausgabeumleitung von der Shell ausgefuehrt wird *bevor* das Programm gestartet wird. Wenn man es so macht, verliert man die Datei.
Use ed once in a while!

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

Re: debian bash script sort in txt file

Beitrag von Meillo » 31.10.2024 14:51:22

heisenberg hat geschrieben: ↑ zum Beitrag ↑
31.10.2024 14:48:01
Das geht mit sponge aus Debianmoreutils:
Generell gesprochen ist das so, aber bei sort(1) geht es auch ohne, was an der spezifischen Arbeitsweise von sort(1) liegt -- es liest erst allen Input bevor es den ersten Output schreibt.
Use ed once in a while!

tobo
Beiträge: 2346
Registriert: 10.12.2008 10:51:41

Re: debian bash script sort in txt file

Beitrag von tobo » 01.11.2024 10:13:15

Soll die Sortierung auf das 4. Feld (on/offline) beschränkt sein und ansonsten die Reihenfolge unverändert bleiben (stabile Sortierung), dann so was:

Code: Alles auswählen

sort -st";" -k4,4

Benutzeravatar
joe2017
Beiträge: 1274
Registriert: 07.08.2017 14:29:51

Re: debian bash script sort in txt file

Beitrag von joe2017 » 04.11.2024 15:44:54

Ich habe die Sortierung in eine zweite Datei geschrieben und die alte anschließend ausgetauscht.
Vielen Dank auf jeden fall!

Benutzeravatar
joe2017
Beiträge: 1274
Registriert: 07.08.2017 14:29:51

Re: debian bash script sort in txt file

Beitrag von joe2017 » 06.11.2024 10:00:04

Noch eine kleine Frage.

Ich hab folgende Syntax zum sortieren verwendet:

Code: Alles auswählen

sort -t ";" -k 4 liste.txt
Das funktioniert auch bestens.
Kann man auch nach mehreren Spaltn sortieren? Sortieren nach spalte 3 und anschließend nach Spalte 4.
Ich habe das in zwei steps gemacht und hier wird nicht saubr sortiert.

Die Sortirung nach Spalte 3 funktioniert. Wenn ich anschließnd nach spalte 4 sortiere wird die Spalte 3 wieder durchgewürfelt.

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

Re: debian bash script sort in txt file

Beitrag von Meillo » 06.11.2024 10:11:01

joe2017 hat geschrieben: ↑ zum Beitrag ↑
06.11.2024 10:00:04
Ich hab folgende Syntax zum sortieren verwendet:

Code: Alles auswählen

sort -t ";" -k 4 liste.txt
Das funktioniert auch bestens.
Allerdings sortiert es genau genommen nicht nach Spalte 4, sondern nach ``Spalte 4 is zum Ende der Zeile''. Wenn du nur nach Spalte 4 Sortieren willst, dann musst du `-k4,4' verwenden.
joe2017 hat geschrieben: ↑ zum Beitrag ↑
06.11.2024 10:00:04
Kann man auch nach mehreren Spaltn sortieren? Sortieren nach spalte 3 und anschließend nach Spalte 4.
So:

Code: Alles auswählen

sort -k3,3 -k4,4

Btw: Du kannst an die Sortierfelder jeweils auch noch `n' oder `r' anhaengen, um sie numerisch oder absteigend zu sortieren.
Use ed once in a while!

Benutzeravatar
joe2017
Beiträge: 1274
Registriert: 07.08.2017 14:29:51

Re: debian bash script sort in txt file

Beitrag von joe2017 » 06.11.2024 11:04:28

Also ich habe es mit folgendem getestet. leider wird nicht nach Spalte 4 sortiert.

Code: Alles auswählen

sort -t ";" -k 3,3 -k 4,4 liste.txt > liste2.txt

tobo
Beiträge: 2346
Registriert: 10.12.2008 10:51:41

Re: debian bash script sort in txt file

Beitrag von tobo » 06.11.2024 11:17:00

joe2017 hat geschrieben: ↑ zum Beitrag ↑
06.11.2024 11:04:28
Also ich habe es mit folgendem getestet. leider wird nicht nach Spalte 4 sortiert.

Code: Alles auswählen

sort -t ";" -k 3,3 -k 4,4 liste.txt > liste2.txt
Doch - erst nach 3, dann nach 4:

Code: Alles auswählen

$ echo -e "a;1;2;5\nb;1;2;1\nc;1;2;4\nd;1;2;2\ne;1;2;3\nf;1;1;2\ng;1;1;1" | sort -t";" -k3,3 -k4,4
g;1;1;1
f;1;1;2
b;1;2;1
d;1;2;2
e;1;2;3
c;1;2;4
a;1;2;5
$

Benutzeravatar
joe2017
Beiträge: 1274
Registriert: 07.08.2017 14:29:51

Re: debian bash script sort in txt file

Beitrag von joe2017 » 06.11.2024 11:28:22

Meine Datei Sieht wie folgt aus:

Code: Alles auswählen

a1;b;1;online;c
a2;b;2;online;c
a3;b;1;offline;c
a4;b;3;online;c
a5;b;5;online;c
a6;b;4;offline;c
a7;b;1;online;c
a8;b;2;online;c
a9;b;1;online;c
Ich möchte das diese so sortiert wird:

Code: Alles auswählen

a3;b;1;offline;c
a6;b;4;offline;c
a1;b;1;online;c
a7;b;1;online;c
a9;b;1;online;c
a2;b;2;online;c
a8;b;2;online;c
a4;b;3;online;c
a5;b;5;online;c
Also zu erst die 4 Spalte, dann die zweite Spalte und zuletzt die 1 Spalte
Das funktioniert nicht:

Code: Alles auswählen

sort -t ";" -k4,4 -k3,3 -k1,1 liste.txt > liste2.txt

tobo
Beiträge: 2346
Registriert: 10.12.2008 10:51:41

Re: debian bash script sort in txt file

Beitrag von tobo » 06.11.2024 11:33:10

Du hast die Spalten verwechselt (nicht 4,2,1 sondern 4,3,1):

Code: Alles auswählen

$ sort -t";" -k4,4 -k3,3 -k1,1 f
a3;b;1;offline;c
a6;b;4;offline;c
a1;b;1;online;c
a7;b;1;online;c
a9;b;1;online;c
a2;b;2;online;c
a8;b;2;online;c
a4;b;3;online;c
a5;b;5;online;c
$

Benutzeravatar
joe2017
Beiträge: 1274
Registriert: 07.08.2017 14:29:51

Re: debian bash script sort in txt file

Beitrag von joe2017 » 06.11.2024 11:36:48

ich hab es erfolgreich mit folgendem Befehl erfolgreich getestet:

Code: Alles auswählen

sort -t ";" -k 4b,4 -k 3,3 -k 1,1 liste.txt > liste2.txt

Benutzeravatar
joe2017
Beiträge: 1274
Registriert: 07.08.2017 14:29:51

Re: debian bash script sort in txt file

Beitrag von joe2017 » 06.11.2024 11:37:48

tobo hat geschrieben: ↑ zum Beitrag ↑
06.11.2024 11:33:10
Du hast die Spalten verwechselt (nicht 4,2,1 sondern 4,3,1):
Mein Fehler
Ich meine Spalte 4, Spalte 3, Spalte 1

Antworten