-n- gibt Ihnen numerische Sortierung. Hinzugefügt, seit Sie es in Ihrem Versuch hinzugefügt haben. Wenn Ihr Benutzerfeld nur aus Text besteht, benötigen Sie ihn nicht.
-k3- definiert das Feld (Schlüssel). Benutzer ist das dritte Feld.
Wie kann ich Sort 2 Spalten verwenden? Zum Beispiel möchte ich zuerst nach Spalte 6 und dann nach Spalte 3 sortieren.
user2452340
1
Dies funktioniert nicht, wenn in der CSV Zeichenfolgen in Anführungszeichen stehen, die Kommas enthalten (es sei denn, die Spalte, nach der Sie sortieren möchten, ist früher als die kommagehaltige Spalte). Möglicherweise müssen Sie zuerst mit awk einen Pass ausführen (mit FPAT = "[^,] * | \" [^ \ "] * \" "und OFS =" | "oder einem anderen Trennzeichen, das Sie mit sort verwenden können)
Davemyron
1
@ user2452340 Sie können dies tun: sort -t, -nk3 filename.csv | sort -t, -nk6- Zuerst wird nach Spalte 3 sortiert, dann nach Spalte 6, damit Spalte 6 vollständig sortiert wird, und für alle Zeilen, in denen Spalte 6 identisch ist, werden diese nach Spalte 3 sortiert .
Matthew
3
@ Matthew sort -t ',' -k3,3n -k6,6nwird besser sein. -k3verwendet Spalte 3 und den Rest der Zeile.
Kusalananda
1
Ich brauchte nur das -t, um meine 2-Spalten-Datei durch Kommas zu teilen, danke jaypal
Ricardo Rivera Nieves
18
Verwenden Sie awk, um die Benutzer-ID in den Vordergrund zu stellen.
Sortieren
Verwenden Sie sed, um die doppelte Benutzer-ID zu entfernen, vorausgesetzt, die Benutzer-IDs enthalten keine Leerzeichen.
Dies ist sehr nützlich, insbesondere wenn Sie Spalten analysieren oder kombinieren müssen, um ein Sortierfeld hinzuzufügen, und dann nur die ursprüngliche Zeile beibehalten müssen. Ich habe awk / split verwendet, um Datums- und Zeitfelder für eine Sortierung zu analysieren / zu kombinieren und dann zu entfernen.
Skytaker
sortweiß bereits, wie man nach einer bestimmten Spalte sortiert, aber diese Technik - bekannt als Schwartzsche Transformation - ist nützlich, wenn das Feld, nach dem Sie sortieren möchten, nicht trivial eine genau definierte Spalte ist.
Sie können ein Trennzeichen auswählen. In diesem Fall habe ich einen Doppelpunkt ausgewählt und die Spalte Nummer eins gedruckt, sortiert nach alphabetischer Reihenfolge:
sort -t, -k3 file
Antworten:
Wie wäre es einfach
sort
.wo
-t,
- definiert Ihr Trennzeichen als,
.-n
- gibt Ihnen numerische Sortierung. Hinzugefügt, seit Sie es in Ihrem Versuch hinzugefügt haben. Wenn Ihr Benutzerfeld nur aus Text besteht, benötigen Sie ihn nicht.-k3
- definiert das Feld (Schlüssel). Benutzer ist das dritte Feld.quelle
sort -t, -nk3 filename.csv | sort -t, -nk6
- Zuerst wird nach Spalte 3 sortiert, dann nach Spalte 6, damit Spalte 6 vollständig sortiert wird, und für alle Zeilen, in denen Spalte 6 identisch ist, werden diese nach Spalte 3 sortiert .sort -t ',' -k3,3n -k6,6n
wird besser sein.-k3
verwendet Spalte 3 und den Rest der Zeile.Verwenden Sie sed, um die doppelte Benutzer-ID zu entfernen, vorausgesetzt, die Benutzer-IDs enthalten keine Leerzeichen.
quelle
sort
weiß bereits, wie man nach einer bestimmten Spalte sortiert, aber diese Technik - bekannt als Schwartzsche Transformation - ist nützlich, wenn das Feld, nach dem Sie sortieren möchten, nicht trivial eine genau definierte Spalte ist.und für umgekehrte Reihenfolge
quelle
Sie können ein Trennzeichen auswählen. In diesem Fall habe ich einen Doppelpunkt ausgewählt und die Spalte Nummer eins gedruckt, sortiert nach alphabetischer Reihenfolge:
quelle
Versuche dies -
ODER
quelle
Das sollte funktionieren
quelle
Um die erste Zeile (Kopfzeile) von der Sortierung auszuschließen, habe ich sie in zwei Puffer aufgeteilt.
quelle