Linux-Shell-Sortierdatei nach der zweiten Spalte?


Antworten:


152

Wenn dies UNIX ist:

sort -k 2 file.txt

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


2
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):

sort -k 2,2 -s orig_file > sorted_file

3

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.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.