GNU ordenar por mayúsculas y minúsculas

35

La sortutilidad en Ubuntu 10.04 (Lucid) siempre ordena por mayúsculas y minúsculas, al igual que si lo especificas --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

Pero a veces quiero ordenar por mayúsculas y minúsculas, por lo que las letras mayúsculas son lo primero, luego las minúsculas. ¿Es posible?

Xiè Jìléi
fuente

Respuestas:

31

Anular el orden de clasificación.

echo -e "c\nb\nB\na" | LC_COLLATE=C sort
Ignacio Vazquez-Abrams
fuente
55
Esto funciona, pero por definición solo si no hay caracteres extranjeros. están en juego se ordenarán después de las letras ASCII de 7 bits; tratar echo $'B\nÄ\nb\na' | LC_COLLATE=C sort. ¿No debería considerarse un error el hecho de que GNU sortcon un Centorno no local siempre realiza una clasificación sensible a mayúsculas y minúsculas ?
mklement0
Con respecto a los "caracteres extraños", el C.UTF-8locale ( LC_COLLATE=C.UTF-8) clasificará entre mayúsculas y minúsculas, mientras que trata los caracteres UTF-8 no ascii "normalmente". Desafortunadamente, no está disponible en sentido ascendente en glibc y solo parcheado por Debian, Ubuntu y derivados.
aplauso
13

Curiosamente, hay otro orden de clasificación disponible como este:

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

que pone la letra mayúscula antes de su letra minúscula correspondiente.

Aquí hay una comparación de sus salidas (agregué "d" y "D") en la en_US.UTF-8configuración regional (excepto donde se reemplaza):

  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

Salida:

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
Pausado hasta nuevo aviso.
fuente
Interesante; Veo este comportamiento en GNU sort v5.93(viene con OS X 10.9.3 (!)) Y v8.13, pero NO en v8.21y v8.22. Supongo que los resultados de 2. y 4. todavía pueden considerarse equivalentes (pero eso obviamente cambiaría con la adición de caracteres extranjeros).
mklement0