Sortieren (Unix)
![]() Das sort Befehl | |
Originalautor (en) | Ken Thompson (AT & T Bell Laboratories) |
---|---|
Entwickler (en) | Verschiedene Open Source und kommerziell Entwickler |
Erstveröffentlichung | 3. November 1971 |
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
- ^ "Multics -Befehle". www.multicians.org.
- ^ McIlroy, M. D. (1987). A Research Unix Reader: Annotierte Auszüge aus dem Programmierhandbuch, 1971–1986 (PDF) (Technischer Bericht). Cstr. Bell Labs. 139.
- ^ "Sortieren (1): Sortieren Sie Zeilen von Textdateien - Linux Man Page". Linux.die.net.
- ^ "MSX-DOS2-Tools Benutzerhandbuch-MSX-DOS2-Tools ユーザーズ マニュアル". 1. April 1993 - über das Internet -Archiv.
- ^ IBM. "IBM System I Version 7.2 Programmierung Qshell" (PDF). Abgerufen 2020-09-05.
- ^ "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.
- ^ 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
- Original -Sort -Manpage Das ursprüngliche BSD UNIX -Programm des Programms Manpage
- Linux Benutzer Handbuch - Benutzerbefehle - -
- Plan 9 Programmierhandbuch, Volume 1 - -
- Inferno Allgemeine Befehle Handbuch - -
- Weitere Details zur Sortierung bei Softpanorama