2017-09-02 3 views
-1

Also habe ich eine Textdatei namens sortingnames.txt und es sieht so unter dem Befehl cat aus.Wie funktioniert der Sortierbefehl in diesem speziellen Fall?

A. Thaliana 
E. Coli 
H. sapiens 
S. cerevisiae 
A thaliana 
E Coli 
H sapiens 
S cerevisiae 
A. Thaliana (plant) 
E. Coli (Bacteria) 
H. Sapiens (Human) 
S. Cerevisiae (Yeast) 
203 characters? 
A. Thaliana Plant 

Dann führe ich Sortierbefehl $ sort -k 3.2 sortingnames.txt. Das Ergebnis erscheint so.

203 characters 
A thaliana 
A. Thaliana 
E Coli 
E. Coli 
H sapiens 
H. sapiens 
S cerevisiae 
S. cerevisiae 
E. Coli (Bacteria) 
H. Sapiens (Human) 
A. Thaliana (plant) 
A. Thaliana Plant 
S. Cerevisiae (Yeast) 

Die Reihenfolge der letzten 5 Zeilen ergibt für mich keinen Sinn. Unter der Annahme, dass die Sortierung keine Interpunktionen wie (der dritte Buchstabe von E. Coli (Bakterien) ist c und die nächste Zeile mit (Mensch) ist m. Der 3. Buchstabe der Pflanzenlinien ist a und für die Hefezeile ist a. .

Und doch ist diese bash kehrt Kann jemand erklären, warum

+0

Was ist Ihre Sprache? Was gibt 'locale' aus? – Kusalananda

+2

'-k 3.2' bedeutet "das dritte Feld, beginnend mit dem Zeichen 2". Es wählt nicht das dritte Zeichen von irgendetwas aus. –

+0

Locale ausgibt LANG = en_US.UTF-8 LC_CTYPE = "en_US.UTF-8" LC_NUMERIC = "en_US.UTF-8" LC_TIME = "en_US.UTF-8" LC_COLLATE = "en_US.UTF-8" LC_MONETARY = "en_US.UTF-8" LC_MESSAGES = "en_US.UTF-8" LC_PAPER = "en_US.UTF-8" LC_NAME = "en_US.UTF-8" LC_ADDRESS = "en_US.UTF-8" LC_TELEPHONE = "en_US.UTF-8" LC_MEASUREMENT = "en_US.UTF-8" LC_IDENTIFICATION = "en_US.UTF-8" LC_ALL = –

Antwort

0

Erscheint ein Problem mit der Sortierfolge zu en_US.UTF-8 bezogen zu sein In diesem Fall sind die linken paren -. ( - effektiv ignoriert die letzten 5 Zeilen zu verlassen suchen wie:

E. Coli Bacteria) 
H. Sapiens Human) 
A. Thaliana plant) 
A. Thaliana Plant 
S. Cerevisiae Yeast) 

Also, wenn Sie die -k3.2 anwenden ... halten ing im Auge sind Leeraums ist in der Zählung enthalten ... Sie mit den folgenden Ergebnisse sortieren links:

' Bacteria)' 
' Human)' 
' plant)' 
' Plant' 
' Yeast)' 

Und wenn Sie ein Groß- und Kleinschreibung Sortierreihenfolge zu prüfen, mit Kleinbuchstaben mit Vorrang vor Großbuchstaben ... die Ergebnisse sind korrekt ... für .

Versuchen Sie, Ihre LANG Variable zu ändern, zB unset LANG. In meinem SLES Umgebung alle LC_* Variablen umschalten auf „POSIX“, und wenn ich die Art wieder laufen, und ich finde die linke Seite paren jetzt als Teil der Sortierzeichenfolge so betrachtet wird, wenn -k3.2 Anwendung erhalte ich:

' (Bacteria) 
' (Human) 
' (Yeast) 
' (plant) 
' Plant 

... aber in diesem Fall hat der linke Paren Vorrang vor Buchstaben, und wir sehen Groß- und Kleinschreibung, wobei Großbuchstaben Vorrang vor Kleinbuchstaben haben ... für LANG= (und die verschiedenen LC_* Variablen = "POSIX")

+0

Können Sie mir sagen, ob es ein Buch oder eine Website gibt, kann ich mehr über dieses Zeug lernen? Danke! –

Verwandte Themen