Ich habe eine Datei wie diese:
FirstName, FamilyName, Address, PhoneNumber
Wie kann ich es nach Familienname sortieren?
Ich habe eine Datei wie diese:
FirstName, FamilyName, Address, PhoneNumber
Wie kann ich es nach Familienname sortieren?
Antworten:
Wenn dies UNIX ist:
sort -k 2 file.txt
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:
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
--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 voranstellen LC_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
gibt a<SPACE><SPACE>b
zuerst (die zweite Spalte beginnt nach der ersten non-blank to blank transition
und <SPACE><SPACE>b
ist vorher <SPACE>a
), aber mit -b
gibt es aa<SPACE>a
wie erwartet ( a
ist vorher b
).
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.
sort -nk2 file.txt
Dementsprechend können Sie die Spaltennummer ändern.