PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : bash sortieren von Dateiinhalten



e271
14-01-2013, 16:47
Hallo,

das Thema wurde zwar schon mehrfach behandelt, aber ich habe zu meinem speziellen Problem leider keine Lösung gefunden.

Ich möchte den Inhalt einer Textdatei nach einer bestimmten Spalte sortieren. Nicht jede Zeile hat diese Spalte, daher sollen die Datensätze ohne diese Spalte am Anfang stehen.

Der Inhalt der Datei sieht folgendermaßen aus:

"Schlumps, Maria";"M_[7Ldkc";"62";"der";"der"
"Meyer, Claudia";"]GK_<dK["
"Albrecht, Martin";"eWcGLdck";"105";"eds";"eds"
"Müller, Martin";"e?37;lK[";"23";"aes";"aes"
Die einzelnen Spalten sind mit einem ";" (inklusive ") getrennt. Die dritte Spalte ist eine Zahl oder leer. Danach soll sortiert werden.

Über Tipps würde ich mich freuen.

undefined
15-01-2013, 15:01
Sort ist dein Freund.


cat datei | sort --field-separator=; --key=3 --numeric-sort

e271
15-01-2013, 16:01
@undefined

Eben genau das funktioniert nicht. Selbst wenn ich --field-separator=";" benutze klappt's nicht.

undefined
15-01-2013, 17:57
Datenbank Design Fehler ;)
Weil bei dir der Dritter Wert als String deklariert ist wird er nicht als Numeric behandelt.

e271
15-01-2013, 18:23
Ich hab's gerade geändert, nützt aber nichts, weil ich ja Zeilen _ohne_ dritte Spalte habe und in der zweiten Spalte auch Semikolons vorkommen können. Ein Trenner -t; funktioniert also nicht, ein Trenner -t";" auch nicht, weil die Zahlen ja nicht in Anführungszeichen stehen :(

undefined
16-01-2013, 15:00
Weis nicht wo dein Problem liegt.
Bei mir geht dein Beispiel Code vom ersten Thread mit der Zeichenketten Konvertierung.


:/tmp> cat datei | sort --field-separator=';' --key=3 --numeric-sort
"Meyer, Claudia";"]GK_<dK["
"Müller, Martin";"e?37;lK[";23;"aes";"aes"
"Schlumps, Maria";"M_[7Ldkc";62;"der";"der"
"Albrecht, Martin";"eWcGLdck";105;"eds";"eds"

e271
16-01-2013, 15:28
Stimmt. In meinen Datensätzen sind aber auch Semikolons in der zweiten Spalte. Folgendes funktioniert schon nicht mehr:

"Schlumps, Maria";"M_[7Ldkc";62;"der";"der"
"Meyer, Claudia";"]GK_ ;<dK["
"Albrecht, Martin";"eWcG ;Ldck";105;"eds";"eds"
"Müller, Martin";"e?37 ;lK[";23;"aes";"aes"
"Schlumps, Maria";"M_[7L ;dkc";62;"der";"der"
"Meyer, Claudia";"]GK_<dK["
"Albrecht, Martin";"eWGLdck";105;"eds";"eds"
"Müller, Martin";"e?37lK[";23;"aes";"aes"

Ausgabe:

cat neu.txt | sort --field-separator=';' --key=3 --numeric-sort
"Albrecht, Martin";"eWcG ;Ldck";105;"eds";"eds"
"Meyer, Claudia";"]GK_<dK["
"Meyer, Claudia";"]GK_ ;<dK["
"Müller, Martin";"e?37 ;lK[";23;"aes";"aes"
"Schlumps, Maria";"M_[7L ;dkc";62;"der";"der"
"Müller, Martin";"e?37lK[";23;"aes";"aes"
"Schlumps, Maria";"M_[7Ldkc";62;"der";"der"
"Albrecht, Martin";"eWGLdck";105;"eds";"eds"

e271
16-01-2013, 16:17
Ich hab's jetzt gelöst, indem ich als Trenner einfach ein | genommen habe. Weshalb ich da nicht gleich drauf gekommen bin ... :mad:

Danke, undefined, für Deine Hilfe und Geduld!