GNU trié par casse


35

L' sortutilitaire dans Ubuntu 10.04 (Lucid) effectue toujours un tri sans distinction de casse, comme si vous le spécifiiez --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

Mais parfois, je souhaite effectuer un tri en fonction de la casse, afin que les lettres majuscules viennent en premier, puis les lettres minuscules. C'est possible?

Réponses:


31

Ignorer l'ordre de classement.

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

5
Cela fonctionne, mais par définition seulement s'il n'y a pas de caractères étrangers. sont en jeu; ils trieront après les lettres ASCII 7 bits; essayez echo $'B\nÄ\nb\na' | LC_COLLATE=C sort. Le fait que GNU sortavec une non- Clocale effectue toujours un tri respectueux de la casse soit-il considéré comme un bogue ?
— mklement0

En ce qui concerne les "caractères étrangers", la C.UTF-8locale ( LC_COLLATE=C.UTF-8) effectuera un tri sensible à la casse, tout en traitant les caractères UTF-8 non ascii "normalement". Malheureusement, il n’est pas disponible en amont dans glibc et n’est corrigé que par Debian, Ubuntu et ses dérivés.
— aplaice

13

Fait intéressant, encore un autre ordre de tri est disponible comme ceci:

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

qui met la lettre majuscule avant la lettre minuscule correspondante.

Voici une comparaison de leurs sorties (j'ai ajouté "d" et "D") dans les en_US.UTF-8paramètres régionaux (sauf en cas de substitution):

  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

Sortie:

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

Intéressant; Je constate ce comportement dans GNU sort v5.93(fourni avec OS X 10.9.3 (!)) Et v8.13, mais PAS dans v8.21et v8.22. Je suppose que les résultats de 2. et 4. peuvent toujours être considérés comme équivalents (mais cela changerait évidemment avec l'ajout de caractères étrangers).
— mklement0
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.