Sortieren (Unix)

Sortieren
Sortunix.png
Das sort Befehl
Originalautor (en) Ken Thompson (AT & T Bell Laboratories)
Entwickler (en) Verschiedene Open Source und kommerziell Entwickler
Erstveröffentlichung 3. November 1971; vor 50 Jahren
Geschrieben in C
Betriebssystem Mehrheit, Unix, Unix-artig, V, Plan 9, Inferno, MSX-dos, Ibm i
Plattform Plattformübergreifend
Typ Befehl
Lizenz CoreUtils: GPLV3+
Plan 9: MIT -Lizenz

Im Computer, Sortieren ist ein Standard Befehlszeile Programm von Unix und Unix-artig Betriebssysteme, das druckt die Zeilen seiner Eingabe oder Verkettung von allen Dateien in seiner aufgeführt Argumentliste in sortierter Reihenfolge. Die Sortierung erfolgt basierend auf einem oder mehreren Sorttasten, die aus jeder Eingangslinie extrahiert wurden. Standardmäßig wird die gesamte Eingabe als Sortschlüssel angesehen. Leerer Speicherplatz ist das Standardfeldtrennzeichen. Der Befehl unterstützt eine Reihe von Befehlszeilenoptionen Das kann je nach Implementierung variieren. Zum Beispiel die "-r"Flag wird die Sortierreihenfolge umkehren.

Geschichte

A sort Befehl, das eine allgemeine Sortiereinrichtung aufruft Mehrheit.[1] Später erschien es in Version 1 Unix. Diese Version wurde ursprünglich geschrieben von Ken Thompson bei AT & T Bell Laboratories. Durch Version 4 Thompson hatte es zur Verwendung geändert Rohre, aber sortieren Sie eine Option, um die Ausgabedatei zu benennen, da sie zum Sortieren einer Datei verwendet wurde. Im Version 5, Thompson erfunden "-", um darzustellen Standardeingabe.[2]

Die Version von Sortieren gebündelt GNU CoreUtils wurde von Mike Haertel und Paul Eggert geschrieben.[3] Diese Implementierung verwendet die Zusammenführen, sortieren Algorithmus.

Ähnliche Befehle sind in vielen anderen Betriebssystemen verfügbar, zum Beispiel a Sortieren Befehl ist Teil von ASCII's MSX-DOS2-Tools zum MSX-dos Version 2.[4]

Das Sortieren Der Befehl wurde auch auf die portiert Ibm i Betriebssystem.[5]

Syntax

Sortieren Sie [Option] ... [Datei] ...

Ohne DATEI, oder wann DATEI ist -, der Befehl liest aus Standardeingabe.

Parameter

Name Beschreibung Unix Plan 9 Inferno Freebsd Linux MSX-dos Ibm i
-b,
-IGNORE-LEITUNGS-BLANKS
Ignoriert führende Rohlinge. Ja Ja Nein Ja Ja Nein Ja
-c Überprüfen Sie, ob die Eingabedatei sortiert ist. Nein Ja Nein Ja Ja Nein Ja
-C Wie -c, meldet aber nicht die erste schlechte Zeile. Nein Nein Nein Ja Ja Nein Nein
-d,
-Wörterbuch
Betrachtet nur Rohlinge und alphanumerische Zeichen. Ja Ja Nein Ja Ja Nein Ja
-f,
--Fall ignorieren
Falten Sie den unteren Fall in die oberen Fallzeichen. Ja Ja Nein Ja Ja Nein Ja
-g,
-General-Numeric-Sort,
-sort = allgemein-numerisch
Vergleich nach allgemeinem numerischen Wert. Ja Ja Nein Ja Ja Nein Nein
-h,
-Human-Numeric-Sort,
--sort = menschlich-numerisch
Vergleichen Sie menschliche lesbare Zahlen (z. B. 2K 1G). Ja Nein Nein Ja Ja Nein Nein
-ich,
-IGNORE-NONprinting
Berücksichtigt nur druckbare Zeichen. Ja Ja Nein Ja Ja Nein Ja
-k,
--Key =Pos1[,Pos2]
Starten Sie einen Schlüssel bei Pos1 (Ursprung 1) beenden Sie es bei Pos2 (Standardende der Zeile) Nein Nein Nein Ja Ja Nein Nein
-m Nur verschmelzen; Es wird angenommen, dass Eingabedateien vorgeschrieben werden. Nein Ja Nein Ja Ja Nein Ja
-M,
-Monat,
-Sort = Monat
Vergleiche (unbekannt) <'Jan' <... <'dec'. Ja Ja Nein Ja Ja Nein Nein
-n,
-Numeric-Sort,
--sort = numerisch
Vergleich gemäß dem Numerischen Wert von String. Ja Ja Ja Ja Ja Nein Ja
AUSGANG Verwendet AUSGANG Datei statt Standardausgabe. Nein Ja Nein Ja Ja Nein Ja
-r,
--umkehren
Kehrt das Ergebnis von Vergleiche um. Ja Ja Ja Ja Ja Nein Ja
-R,
-Random-Sort,
-Sort = zufällig
Mischt, aber Gruppen identische Schlüssel. Siehe auch: Shuf Ja Nein Nein Ja Ja Nein Nein
-s Stabilisiert die Sortierung, indem Sie den Last-Resort-Vergleich deaktivieren. Nein Nein Nein Ja Ja Nein Nein
-S Größe,
-Buffer-Größe =Größe
Verwenden Größe für die maximale Größe des Speicherpuffers. Nein Nein Nein Ja Nein Nein Nein
-tx 'Tab charakter' trennende Felder ist x. Nein Ja Nein Nein Ja Nein Ja
-t verkohlen,
-Feld-Separator =verkohlen
Verwendet verkohlen anstelle von Nicht-Blank zum leeren Übergang. Nein Nein Nein Ja Ja Nein Nein
-T Dir,
-Temporary-Verzeichnis =Dir
Verwendet Dir für Zeiträume. Nein Ja Nein Ja Ja Nein Nein
-U,
--einzigartig
Einzigartige Verarbeitung, um alle bis auf einen in jedem Satz von Linien mit gleichen Schlüssel zu unterdrücken. Nein Ja Nein Ja Ja Nein Ja
-V,
--version Sort
Natürliche Art von (Versions-) Zahlen innerhalb des Textes Nein Nein Nein Ja Ja Nein Nein
-W Wie -i, aber ignoriere nur Registerkarten und Räume. Nein Ja Nein Nein Nein Nein Nein
-Z,
-Zero-terminiert
Endzeilen mit 0 Byte, nicht neuer Linie Nein Nein Nein Ja Ja Nein Nein
--Hilfe Hilfe anzeigen und beenden Nein Nein Nein Ja Ja Nein Nein
--Ausführung Versionsinformationen ausgeben und beenden Nein Nein Nein Ja Ja Nein Nein
/R Kehrt das Ergebnis von Vergleiche um. Nein Nein Nein Nein Nein Ja Nein
/S Geben Sie die Anzahl der Ziffern an, um festzustellen, wie viele Ziffern jeder Zeile beurteilt werden sollten. Nein Nein Nein Nein Nein Ja Nein
/EIN Sortieren nach ASCII -Code. Nein Nein Nein Nein Nein Ja Nein
/H Fügen Sie versteckte Dateien bei, wenn Sie Wildkarten verwenden. Nein Nein Nein Nein Nein Ja Nein

Beispiele

Sortieren Sie eine Datei in alphabetischer Reihenfolge

$ Katzen -TelefonbuchSmith, Brett 555-4321 Doe, John 555-1234 Doe, Jane 555-3214 Avery, Cory 555-4132 Fogarty, Suzie 555-2314 
$ Telefonbuch sortierenAvery, Cory 555-4132 Doe, Jane 555-3214 Doe, John 555-1234 Fogarty, Suzie 555-2314 Smith, Brett 555-4321 

Sortieren nach Nummer

Das -n Die Option macht das Programm sortiert nach dem numerischen Wert. Das Du Der Befehl erzeugt die Ausgabe, die mit einer Zahl, der Dateigröße beginnt Sortieren So erstellen Sie eine Liste von Dateien, die nach (aufsteigenden) Dateigröße sortiert sind:

$ du /bin /* | sortieren -n4 /bin /domainname 24 /bin /ls 102 /bin /sh 304 /bin /csh 

Das finden Befehl mit dem ls Die Option druckt Dateigrößen im Feld 7., also eine Liste der Latex Die nach Dateigröße sortierten Dateien werden erstellt von:

$ finden . -Name "*.Tex" -ls | sortieren -k 7n

Spalten oder Felder

Verwenden Sie das -k Option zum Sortieren einer bestimmten Spalte. Zum Beispiel verwenden ""-K 2"Um die zweite Spalte zu sortieren. In alten Sortierversionen, die +1 Die Option machte die Programmsortierung in der zweiten Datenspalte (+2 für den dritten usw.). Diese Verwendung ist veraltet.

$ KatzenzipcodeAdam 12345 Bob 34567 Joe 56789 Sam 45678 Wendy 23456 
$ Sortieren Sie -k 2n ZipcodeAdam 12345 Wendy 23456 Bob 34567 Sam 45678 Joe 56789 

Sortieren Sie mehrere Felder

Das -k m, n Mit der Option können Sie einen Schlüssel sortieren, der möglicherweise aus mehreren Feldern besteht (Start bei der Spalte m, Ende bei der Spalte n):

$ KatzenquoteFred 2000 Bob 1000 und 1000 Chad 1000 Don 1500 Eric 500 
$ sortieren -k2,2n -k1,1 QuoteEric 500 und 1000 Bob 1000 Chad 1000 Don 1500 Fred 2000 

Hier erfolgt die erste Sortierung mit Spalte 2. -k2,2n Gibt das Sortieren auf dem Schlüssel an, das mit Spalte 2 startet und endet, und sortieren numerisch. Wenn -k2 wird stattdessen verwendet, die Sortierschlüssel beginnt in Spalte 2 und erstreckt sich bis zum Ende der Linie und erstreckt sich über alle dazwischen liegenden Felder. -k1,1 Diktiert brechen Bindungen mit dem Wert in Spalte 1 und sortieren standardmäßig alphabetisch. Beachten Sie, dass Bob und Chad die gleiche Quote haben und alphabetisch in der endgültigen Ausgabe sortiert werden.

Sortieren einer von der Pfeife abgrenzten Datei

$ sortieren -k2,2, -k1,1 -t'|' PostleitzahlAdam | 12345 Wendy | 23456 Sam | 45678 Joe | 56789 Bob | 34567 

Sortieren einer Registerkarte Abgrenzte Datei

Sortieren einer Datei mit Registerkarte getrennte Werte benötigt ein Tab -Zeichen als Spaltentrainer angegeben werden. Diese Illustration verwendet die Dollar-Zitat-Notation der Shell[6][7] So geben Sie die Registerkarte als a an C Escape -Sequenz.

$ sortieren -k2,2 -t $ '\ t' TelefonbuchDoe, John 555-1234 Fogarty, Suzie 555-2314 Doe, Jane 555-3214 Avery, Cory 555-4132 Smith, Brett 555-4321 

Umgekehrt sortieren

Das -r Die Option kehrt nur die Reihenfolge der Art um:

$ Sortieren Sie -rk 2n ZipcodeJoe 56789 Sam 45678 Bob 34567 Wendy 23456 Adam 12345 

Zufällig sortieren

Die GNU -Implementierung hat a -R-Random-Sort Option basierend auf Hashing; Dies ist kein vollständiger zufälliger Shuffle, da es identische Linien zusammenfasst. Eine echte zufällige Sortierung wird vom UNIX -Dienstprogramm zur Verfügung gestellt Shuf.

Sortieren nach der Version

Die GNU -Implementierung hat a -V --versionsort Option, die eine natürliche Art von (Versions-) Zahlen innerhalb des Textes ist. Zwei zu verglichene Textzeichenfolgen werden in Buchstaben und Ziffernblöcke aufgeteilt. Buchstabenblöcke werden alpha-numerisch verglichen, und die Ziffernblöcke werden numerisch verglichen (d. H. Überspringen führender Nullen, mehr Ziffern bedeutet größer, ansonsten die größten Ziffern links bestimmen das Ergebnis). Blöcke werden von links nach rechts verglichen und der erste nicht gleiche Block in dieser Schleife entscheidet, welcher Text größer ist. Dies funktioniert zufällig für IP -Adressen, Debian -Paketversionszeichenfolgen und ähnliche Aufgaben, bei denen die Anzahl der variablen Länge in Saiten eingebettet ist.

Siehe auch

Verweise

  1. ^ "Multics -Befehle". www.multicians.org.
  2. ^ McIlroy, M. D. (1987). A Research Unix Reader: Annotierte Auszüge aus dem Programmierhandbuch, 1971–1986 (PDF) (Technischer Bericht). Cstr. Bell Labs. 139.
  3. ^ "Sortieren (1): Sortieren Sie Zeilen von Textdateien - Linux Man Page". Linux.die.net.
  4. ^ "MSX-DOS2-Tools Benutzerhandbuch-MSX-DOS2-Tools ユーザーズ マニュアル". 1. April 1993 - über das Internet -Archiv.
  5. ^ IBM. "IBM System I Version 7.2 Programmierung Qshell" (PDF). Abgerufen 2020-09-05.
  6. ^ "Das GNU-Bash-Referenzhandbuch für Bash, Version 4.2: Abschnitt 3.1.2.4 ANSI-C Zitat". Free Software Foundation, Inc. 28. Dezember 2010. Abgerufen 1. Februar 2013. Wörter der Form $ 'String' werden speziell behandelt. Das Wort erweitert sich auf die String, wobei die durch den ANSI C-Standard angegebenen Backslash-Ess-Zeichen ersetzt werden.
  7. ^ Fowler, Glenn S.; Korn, David G.; Vo, Kiem-Phong. "Kornshell FAQ". Archiviert vom Original am 2013-05-27. Abgerufen 3. März 2015. Die $ '...' String Literal Syntax wurde zu KSH93 hinzugefügt, um das Problem der Eingabe von Sonderzeichen in Skripte zu lösen. Es verwendet ANSI-C-Regeln, um die Zeichenfolge zwischen '...' zu übersetzen.

Weitere Lektüre

  • Shotts (JR), William E. (2012). Die Linux -Befehlszeile: Eine vollständige Einführung. Keine Stärkepresse. ISBN 978-1593273897.
  • McElhearn, Kirk (2006). Die MAC OS X -Befehlszeile: UNIX unter der Motorhaube. John Wiley & Sons. ISBN 978-0470113851.

Externe Links