Classificação GNU por distinção entre maiúsculas e minúsculas


35

O sortutilitário no Ubuntu 10.04 (Lucid) sempre classifica por distinção entre maiúsculas e minúsculas, assim como se você especificar --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

Mas, às vezes, quero classificar por distinção entre maiúsculas e minúsculas, para que as letras maiúsculas cheguem primeiro, depois as minúsculas. É possível?

Respostas:


31

Substitua a ordem de intercalação.

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

5
Isso funciona, mas por definição apenas se não houver caracteres estrangeiros. estão em jogo; eles serão classificados após as letras ASCII de 7 bits; tente echo $'B\nÄ\nb\na' | LC_COLLATE=C sort. O fato de o GNU sortcom um não Clocal sempre executar sempre uma classificação sem distinção entre maiúsculas e minúsculas deve ser considerado um bug ?
mklement0

Em relação a "caracteres estranhos", o C.UTF-8código do idioma ( LC_COLLATE=C.UTF-8) classifica com distinção entre maiúsculas e minúsculas, enquanto trata caracteres UTF-8 não ascii "normalmente". Infelizmente, ele não está disponível na glibc a montante e é corrigido apenas pelo Debian, Ubuntu e derivados.
aplaice

13

Curiosamente, ainda há outra ordem de classificação disponível assim:

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

que coloca a letra maiúscula antes da letra minúscula correspondente.

Aqui está uma comparação de suas saídas (adicionei "d" e "D") no en_US.UTF-8código do idioma (exceto onde substituído):

  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

Saída:

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; Eu vejo esse comportamento no GNU sort v5.93(vem com o OS X 10.9.3 (!)) E v8.13, mas NÃO no v8.21e v8.22. Eu acho que os resultados de 2. e 4. ainda podem ser considerados equivalentes (mas isso obviamente mudaria com a adição de caracteres estrangeiros).
mklement0
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.