GNU sortiert nach Groß- und Kleinschreibung


35

Das sortDienstprogramm in Ubuntu 10.04 (Lucid) sortiert immer nach Groß- und Kleinschreibung, genau wie wenn Sie es angeben --ignore-case.

The two sort just give the same result: 

echo -e "c\nb\nB\na" | sort
echo -e "c\nb\nB\na" | sort --ignore-case

Aber manchmal möchte ich nach Groß- und Kleinschreibung sortieren, sodass zuerst die Groß- und dann die Kleinschreibung erfolgt. Ist es möglich?

Antworten:


31

Überschreiben Sie die Sortierreihenfolge.

echo -e "c\nb\nB\na" | LC_COLLATE=C sort

5
Dies funktioniert aber per definitionem nur, wenn keine fremden Zeichen vorhanden sind. sind im Spiel; Sie werden nach den 7-Bit-ASCII-Buchstaben sortiert . versuchen Sie es echo $'B\nÄ\nb\na' | LC_COLLATE=C sort. Sollte nicht die Tatsache, dass GNU sortmit einem Nicht- CGebietsschema immer eine case-IN-sensitive Sortierung durchführt, als Fehler angesehen werden ?
mklement0

In Bezug auf "fremde Zeichen" wird bei C.UTF-8locale ( LC_COLLATE=C.UTF-8) zwischen Groß- und Kleinschreibung unterschieden, während Nicht-ASCII-UTF-8-Zeichen "normal" behandelt werden. Leider ist es nicht in glibc verfügbar und wird nur von Debian, Ubuntu und Derivaten gepatcht.
Aplaice

13

Interessanterweise gibt es noch eine andere Sortierreihenfolge:

echo -e "c\nb\nB\na" | LC_COLLATE=C sort --ignore-case

Dies setzt den Großbuchstaben vor den entsprechenden Kleinbuchstaben.

Hier ist ein Vergleich ihrer Ausgaben (ich habe "d" und "D" hinzugefügt) im en_US.UTF-8Gebietsschema (außer wo überschrieben):

  1. echo -e "d\nD\nc\nb\nB\na" | sort
  2. echo -e "d\nD\nc\nb\nB\na" | sort --ignore-case
  3. echo -e "d\nD\nc\nb\nB\na" | LC_COLLATE=C sort
  4. echo -e "d\nD\nc\nb\nB\na" | LC_COLLATE=C sort --ignore-case

Ausgabe:

1   2   3   4
-   -   -   -
a   a   B   a
b   b   D   B
B   B   a   b
c   c   b   c
d   d   c   D
D   D   d   d

Interessant; Ich sehe dieses Verhalten in GNU sort v5.93(kommt mit OS X 10.9.3 (!)) Und v8.13, aber NICHT in v8.21und v8.22. Ich denke, die Ergebnisse von 2. und 4. können immer noch als gleichwertig angesehen werden (aber das würde sich offensichtlich mit der Hinzufügung von Fremdzeichen ändern).
mklement0
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.