Ordinamento GNU per distinzione tra maiuscole e minuscole


35

L' sortutilità in Ubuntu 10.04 (Lucido) ordina sempre in base al maiuscolo / minuscolo, proprio come se lo specifichi --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

Ma a volte voglio ordinare in base alla distinzione tra maiuscole e minuscole, quindi le lettere maiuscole vengono prima, poi in minuscolo. È possibile?

Risposte:


31

Sostituisci l'ordine di confronto.

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

5
Funziona, ma per definizione solo se non ci sono caratteri stranieri. sono in gioco; ordineranno dopo le lettere ASCII a 7 bit; provare echo $'B\nÄ\nb\na' | LC_COLLATE=C sort. Il fatto che GNU sortcon una non Clocale esegua sempre l' ordinamento case-INsensitive non dovrebbe essere considerato un bug ?
mklement0,

Per quanto riguarda i "caratteri stranieri", le C.UTF-8impostazioni locali ( LC_COLLATE=C.UTF-8) verranno ordinate in base al maiuscolo / minuscolo, trattando "normalmente" caratteri UTF-8 non ascii. Sfortunatamente, non è disponibile a monte in glibc e solo patchato da Debian, Ubuntu e derivati.
aprile

13

È interessante notare che un altro ordinamento è disponibile in questo modo:

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

che mette la lettera maiuscola prima della corrispondente lettera minuscola.

Ecco un confronto dei loro output (ho aggiunto "d" e "D") nelle en_US.UTF-8impostazioni locali (tranne dove sovrascritto):

  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

Produzione:

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

Interessante; Vedo questo comportamento in GNU sort v5.93(viene fornito con OS X 10.9.3 (!)) E v8.13, ma NON in v8.21e v8.22. Immagino che i risultati di 2. e 4. possano ancora essere considerati equivalenti (ma ciò ovviamente cambierebbe con l'aggiunta di caratteri stranieri).
mklement0
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.