Sie können mehrere -kFlags verwenden, um nach mehr als einer Spalte zu sortieren. Zum Beispiel, um nach Familiennamen und dann nach Vornamen als Krawattenbrecher zu sortieren:
sort -k 2,2-k 1,1 file.txt
Relevante Optionen von "man sort":
-k, --key = POS1 [, POS2]
Starten Sie einen Schlüssel an POS1 und beenden Sie ihn an POS2 (Ursprung 1).
POS ist F [.C] [OPTS], wobei F die Feldnummer und C die Zeichenposition im Feld ist. OPTS ist eine oder mehrere Einzelbuchstaben-Bestelloptionen, die die globalen Bestelloptionen für diesen Schlüssel überschreiben. Wenn kein Schlüssel angegeben ist, verwenden Sie die gesamte Zeile als Schlüssel.
-t, --field-separator = SEP
Verwenden Sie SEP anstelle des Übergangs von nicht leer zu leer
Seien Sie nur ein wenig vorsichtig, --field-separator=','wenn Sie möglicherweise einen Dateneingabeoperator haben, der Werte für "Vorname" wie "Billy Bob" oder was auch immer eingibt ... Leerzeichen können leicht in Ihre Daten gelangen, wenn Sie sich nicht dagegen schützen, aber Kommas sind relativ unwahrscheinlich.
Tony Delroy
1
Es gibt sehr wahrscheinlich Fälle von Kommas in diesen Bereichen, wie "Smith, Jr." oder "McDowell, Sr." oder "Dr. John" oder "New York, NY"
jbnunn
2
Beachten Sie, dass Sie die -bOption verwenden müssen, wenn die Spalten visuell ausgerichtet sind, dh zwischen den einzelnen Feldern eine nicht konstante Anzahl von Leerzeichen vorhanden ist . Dies liegt daran, sortdass tatsächlich berücksichtigt wird, dass die zu sortierende Zeichenfolge direkt nach dem Komma beginnt und nicht ab dem ersten Buchstaben der Spalte. Außerdem müssen Sie dem Befehl möglicherweise ein Präfix voranstellen LC_ALL=C, um Nebenwirkungen aufgrund des Gebietsschemas zu vermeiden, die selbst bei einer einfachen ASCII-Datei auftreten können.
Calandoa
@calandoa Danke für den Teil auf -b( --ignore-leading-blanks). Um ein bisschen zu verdeutlichen: echo -e 'aa<SPACE>a\na<SPACE><SPACE>b' | sort -k2gibt a<SPACE><SPACE>bzuerst (die zweite Spalte beginnt nach der ersten non-blank to blank transitionund <SPACE><SPACE>bist vorher <SPACE>a), aber mit -bgibt es aa<SPACE>awie erwartet ( aist vorher b).
Kirill Bulygin
7
Nur nach zweitem Feld sortieren (wenn also zweite Felder übereinstimmen, bleiben die Zeilen mit Übereinstimmungen in der Reihenfolge, in der sie im Original sind, ohne nach anderen Feldern zu sortieren):
FWIW, hier ist eine Sortiermethode, um zu zeigen, welche Prozesse den virtuellsten Speicher verwenden.
memstat | sort -k 1-t':'-g -r | less
Die Sortieroptionen werden auf die erste Spalte gesetzt, wobei Folgendes verwendet wird: als Spaltentrenner, numerische Sortierung und umgekehrte Sortierung.
Antworten:
Wenn dies UNIX ist:
Sie können mehrere
-k
Flags verwenden, um nach mehr als einer Spalte zu sortieren. Zum Beispiel, um nach Familiennamen und dann nach Vornamen als Krawattenbrecher zu sortieren:Relevante Optionen von "man sort":
quelle
--field-separator=','
wenn Sie möglicherweise einen Dateneingabeoperator haben, der Werte für "Vorname" wie "Billy Bob" oder was auch immer eingibt ... Leerzeichen können leicht in Ihre Daten gelangen, wenn Sie sich nicht dagegen schützen, aber Kommas sind relativ unwahrscheinlich.-b
Option verwenden müssen, wenn die Spalten visuell ausgerichtet sind, dh zwischen den einzelnen Feldern eine nicht konstante Anzahl von Leerzeichen vorhanden ist . Dies liegt daran,sort
dass tatsächlich berücksichtigt wird, dass die zu sortierende Zeichenfolge direkt nach dem Komma beginnt und nicht ab dem ersten Buchstaben der Spalte. Außerdem müssen Sie dem Befehl möglicherweise ein Präfix voranstellenLC_ALL=C
, um Nebenwirkungen aufgrund des Gebietsschemas zu vermeiden, die selbst bei einer einfachen ASCII-Datei auftreten können.-b
(--ignore-leading-blanks
). Um ein bisschen zu verdeutlichen:echo -e 'aa<SPACE>a\na<SPACE><SPACE>b' | sort -k2
gibta<SPACE><SPACE>b
zuerst (die zweite Spalte beginnt nach der erstennon-blank to blank transition
und<SPACE><SPACE>b
ist vorher<SPACE>a
), aber mit-b
gibt esaa<SPACE>a
wie erwartet (a
ist vorherb
).Nur nach zweitem Feld sortieren (wenn also zweite Felder übereinstimmen, bleiben die Zeilen mit Übereinstimmungen in der Reihenfolge, in der sie im Original sind, ohne nach anderen Feldern zu sortieren):
quelle
FWIW, hier ist eine Sortiermethode, um zu zeigen, welche Prozesse den virtuellsten Speicher verwenden.
Die Sortieroptionen werden auf die erste Spalte gesetzt, wobei Folgendes verwendet wird: als Spaltentrenner, numerische Sortierung und umgekehrte Sortierung.
quelle
sort -nk2 file.txt
Dementsprechend können Sie die Spaltennummer ändern.
quelle