GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Lassen Sie sich mit sort in der Befehlszeile sortieren

Wenn Sie jemals eine Tabellenkalkulationsanwendung verwendet haben, wissen Sie, dass Zeilen nach dem Inhalt einer Spalte sortiert werden können. Wenn Sie beispielsweise eine Liste mit Ausgaben haben, möchten Sie diese möglicherweise nach Datum, aufsteigendem Preis oder nach Kategorie usw. sortieren. Wenn Sie mit der Verwendung eines Terminals vertraut sind, möchten Sie möglicherweise keine große Office-Anwendung verwenden, nur um Textdaten zu sortieren. Und genau darum geht es bei der Sortierung Befehl ist für.

Installieren

Weitere Linux-Ressourcen

  • Spickzettel für Linux-Befehle
  • Spickzettel für fortgeschrittene Linux-Befehle
  • Kostenloser Online-Kurs:RHEL Technical Overview
  • Spickzettel für Linux-Netzwerke
  • SELinux-Spickzettel
  • Spickzettel für allgemeine Linux-Befehle
  • Was sind Linux-Container?
  • Unsere neuesten Linux-Artikel

Sie müssen sort nicht installieren weil es auf jedem POSIX-System ausnahmslos enthalten ist. Auf den meisten Linux-Systemen ist die sort Der Befehl ist in einer Sammlung von Dienstprogrammen der GNU-Organisation gebündelt. Auf anderen POSIX-Systemen wie BSD und Mac ist die Standardeinstellung sort Der Befehl stammt nicht von GNU, daher können einige Optionen abweichen. Ich werde versuchen, in diesem Artikel sowohl GNU- als auch BSD-Implementierungen zu berücksichtigen.

Zeilen alphabetisch sortieren

Die Sortierung Der Befehl prüft standardmäßig das erste Zeichen jeder Zeile einer Datei und gibt jede Zeile in aufsteigender alphabetischer Reihenfolge aus. Falls zwei Zeichen in mehreren Zeilen gleich sind, wird das nächste Zeichen berücksichtigt. Zum Beispiel:

$ cat distro.list
Slackware
Fedora
Red Hat Enterprise Linux
Ubuntu
Arch
1337
Mint
Mageia
Debian
$ sort distro.list
1337
Arch
Debian
Fedora
Mageia
Mint
Red Hat Enterprise Linux
Slackware
Ubuntu

Verwenden von sortieren ändert die Originaldatei nicht. Sortieren ist ein Filter. Wenn Sie also Ihre Daten in ihrer sortierten Form beibehalten möchten, müssen Sie die Ausgabe entweder mit > umleiten oder T-Stück :

$ sort distro.list | tee distro.sorted
1337
Arch
Debian
[...]
$ cat distro.sorted
1337
Arch
Debian
[...]

Nach Spalte sortieren

Komplexe Datensätze müssen manchmal nach etwas anderem als dem Anfangsbuchstaben jeder Zeile sortiert werden. Stellen Sie sich beispielsweise eine Liste mit Tieren und deren Art und Gattung vor, und jedes „Feld“ (eine „Zelle“ in einer Tabelle) wird durch ein vorhersagbares Trennzeichen definiert. Dies ist ein so verbreitetes Datenformat für Tabellenkalkulationsexporte, dass die CSV-Dateierweiterung (Comma-Separated Values) existiert, um solche Dateien zu identifizieren (obwohl eine CSV-Datei nicht durch Kommas getrennt sein muss, noch eine Datei mit Trennzeichen die CSV-Erweiterung, um gültig und verwendbar zu sein). Betrachten Sie diesen Beispieldatensatz:

Aptenodytes;forsteri;Miller,JF;1778;Emperor
Pygoscelis;papua;Wagler;1832;Gentoo
Eudyptula;minor;Bonaparte;1867;Little Blue
Spheniscus;demersus;Brisson;1760;African
Megadyptes;antipodes;Milne-Edwards;1880;Yellow-eyed
Eudyptes;chrysocome;Viellot;1816;Southern Rockhopper
Torvaldis;linux;Ewing,L;1996;Tux

Bei diesem Beispieldatensatz können Sie den --field-separator verwenden (verwenden Sie -t auf BSD und Mac – oder auf GNU, um das Tippen zu reduzieren), um das Trennzeichen auf ein Semikolon zu setzen (weil dieses Beispiel Semikolons anstelle von Kommas verwendet, aber jedes Zeichen verwenden könnte), und verwenden Sie die --Taste (-k auf BSD und Mac oder auf GNU, um Tipparbeit zu reduzieren) Option, um festzulegen, nach welchem ​​Feld sortiert werden soll. Zum Beispiel, um nach dem zweiten Feld (beginnend bei 1, nicht 0) jeder Zeile zu sortieren:

sort --field-separator=";" --key=2
Megadyptes;antipodes;Milne-Edwards;1880;Yellow-eyed
Eudyptes;chrysocome;Viellot;1816;Sothern Rockhopper
Spheniscus;demersus;Brisson;1760;African
Aptenodytes;forsteri;Miller,JF;1778;Emperor
Torvaldis;linux;Ewing,L;1996;Tux
Eudyptula;minor;Bonaparte;1867;Little Blue
Pygoscelis;papua;Wagler;1832;Gentoo

Das ist etwas schwer zu lesen, aber Unix ist berühmt für seine Pipe Methode zum Erstellen von Befehlen, sodass Sie die Spalte verwenden können Befehl, um die Ausgabe zu "verschönern". GNU-Spalte verwenden :

$ sort --field-separator=";" \
--key=2 penguins.list | \
column --table --separator ";"
Megadyptes   antipodes   Milne-Edwards  1880  Yellow-eyed
Eudyptes     chrysocome  Viellot        1816  Southern Rockhopper
Spheniscus   demersus    Brisson        1760  African
Aptenodytes  forsteri    Miller,JF      1778  Emperor
Torvaldis    linux       Ewing,L        1996  Tux
Eudyptula    minor       Bonaparte      1867  Little Blue
Pygoscelis   papua       Wagler         1832  Gentoo

Etwas kryptischer für den neuen Benutzer (aber kürzer zu tippen), die Befehlsoptionen auf BSD und Mac:

$ sort -t ";" \
-k2 penguins.list | column -t -s ";"
Megadyptes   antipodes   Milne-Edwards  1880  Yellow-eyed
Eudyptes     chrysocome  Viellot        1816  Southern Rockhopper
Spheniscus   demersus    Brisson        1760  African
Aptenodytes  forsteri    Miller,JF      1778  Emperor
Torvaldis    linux       Ewing,L        1996  Tux
Eudyptula    minor       Bonaparte      1867  Little Blue
Pygoscelis   papua       Wagler         1832  Gentoo

Der Schlüssel definition muss nicht auf 2 gesetzt werden , selbstverständlich. Als Sortierschlüssel kann jedes vorhandene Feld verwendet werden.

Umgekehrte Sortierung

Sie können die Reihenfolge einer sortierten Liste mit --reverse umkehren (-r auf BSD oder Mac oder GNU der Kürze halber):

$ sort --reverse alphabet.list
z
y
x
w
[...]

Sie können das gleiche Ergebnis erzielen, indem Sie die Ausgabe einer normalen Sortierung durch tac.

leiten

Sortierung nach Monat (nur GNU)

In einer perfekten Welt würde jeder Datumsangaben nach dem ISO 8601-Standard schreiben:Jahr, Monat, Tag. Es ist eine logische Methode zur Angabe eines eindeutigen Datums und für Computer leicht verständlich. Und doch verwenden Menschen häufig andere Mittel, um Daten zu identifizieren, einschließlich Monaten mit ziemlich willkürlichen Namen.

Glücklicherweise ist GNU sort Der Befehl berücksichtigt dies und kann korrekt nach Monatsnamen sortieren. Verwenden Sie die --month-sort (-M ) Option:

$ cat month.list
November
October
September
April
[...]
$ sort --month-sort month.list
January
February
March
April
May
[...]
November
December

Monate können anhand ihres vollständigen Namens oder eines Teils ihres Namens identifiziert werden.

Von Menschen lesbare numerische Sortierung (nur GNU)

Ein weiterer häufiger Verwirrungspunkt zwischen Menschen und Computern sind Zahlengruppen. Beispielsweise schreiben Menschen oft „1024 Kilobyte“ als „1 KB“, weil es für das menschliche Gehirn einfacher und schneller ist, „1 KB“ als „1024“ zu analysieren (und es wird einfacher, je größer die Zahl wird). Für einen Computer ist eine Zeichenfolge wie 9 KB jedoch größer als beispielsweise 1 MB (obwohl 9 KB nur ein Bruchteil eines Megabytes sind). Die GNU-Sortierung Befehl stellt die --human-numeric-sort bereit (-h )-Option, um diese Werte korrekt zu analysieren.

$ cat sizes.list
2M
12MB
1k
9k
900
7000
$ sort --human-numeric-sort
900
7000
1k
9k
2M
12MB

Es gibt einige Ungereimtheiten. Beispielsweise sind 16.000 Byte größer als 1 KB, aber sortieren erkennt das nicht:

$ cat sizes0.list
2M
12MB
16000
1k
$ sort -h sizes0.list
16000
1k
2M
12MB

Logischerweise müssten 16.000 in diesem Zusammenhang 16KB geschrieben werden, also GNU sortieren ist nicht ganz schuld. Solange Sie sicher sind, dass Ihre Zahlen konsistent sind, ist die --human-numeric-sort kann dabei helfen, menschenlesbare Zahlen computerfreundlich zu parsen.

Randomisierte Sortierung (nur GNU)

Manchmal bieten Dienstprogramme die Möglichkeit, das Gegenteil von dem zu tun, was sie tun sollen. In gewisser Weise macht es für eine Sortierung keinen Sinn Befehl, um eine Datei zufällig "sortieren" zu können. Andererseits macht der Workflow des Befehls es zu einer praktischen Funktion. Sie könnten Verwenden Sie einen anderen Befehl, wie shuf , oder Sie können dem verwendeten Befehl einfach eine Option hinzufügen. Ob aufgeblähtes oder ausgeklügeltes UX-Design, die GNU sort Befehl bietet die Möglichkeit, eine Datei willkürlich zu sortieren.

Die reinste Form der willkürlichen Sortierung ist die --random-sort oder -R Option (nicht zu verwechseln mit dem -r Option, die kurz für --reverse steht ).

$ sort --random-sort alphabet.list
d
m
p
a
[...]

Sie können eine Datei mehrmals nach dem Zufallsprinzip sortieren, um jedes Mal unterschiedliche Ergebnisse zu erzielen.

Sortiert

Mit der Sortierung sind viele weitere Funktionen verfügbar GNU- und BSD-Befehle, also nehmen Sie sich etwas Zeit, um die Optionen kennenzulernen. Sie werden überrascht sein, wie flexibel sortieren ist sein kann, besonders wenn es mit anderen Unix-Hilfsprogrammen kombiniert wird.


Linux
  1. Arbeiten mit Datenströmen auf der Linux-Befehlszeile

  2. Erledigen Sie mit GNU Parallel mehr über die Linux-Befehlszeile

  3. Bearbeiten von Text auf der Kommandozeile mit sed

  4. Wie erhalte ich eine Anzahl von Dateien in einem Verzeichnis über die Befehlszeile?

  5. Drucken von der Befehlszeile mit LibreOffice, lpr-Befehlen?

Linux-Sortierungsbefehl mit Beispielen

Lernen Sie Ihr System kennen (über die Befehlszeile)

Meistern Sie die Linux-Befehlszeile

Bearbeiten von Text in der Befehlszeile mit grep

Zeiterfassung mit Timewarrior auf der Kommandozeile

So funktioniert die Versionskontrolle mit Git auf der Kommandozeile