Qual é a ordem padrão do Linux?

15

Por um longo período, achei que o comportamento padrão do programa sort estava usando a ordem ASCII. No entanto, quando eu insiro as seguintes linhas em sort sem nenhum argumento:

#
@

Eu tenho:

@
#

Mas, de acordo com a tabela ASCII, # é 35 e @ é 64. Outro exemplo é:

A
a

E a saída é:

a
A

Alguém pode explicar isso? A propósito, o que é 'ordem de dicionário' ao usar sort -d ?

    
por G-Man 19.07.2012 / 08:16

3 respostas

14

Parece que você está usando uma localidade não POSIX.

Tente:

export LC_ALL=C

e, em seguida, sort .

info sort diz claramente:

(1) If you use a non-POSIX locale (e.g., by setting 'LC_ALL' to 'en_US'), then 'sort' may produce output that is sorted differently than you're accustomed to. In that case, set the 'LC_ALL' environment variable to 'C'. Note that setting only 'LC_COLLATE' has two problems. First, it is ineffective if 'LC_ALL' is also set. Second, it has undefined behavior if 'LC_CTYPE' (or 'LANG', if 'LC_CTYPE' is unset) is set to an incompatible value. For example, you get undefined behavior if 'LC_CTYPE' is 'ja_JP.PCK' but 'LC_COLLATE' is 'en_US.UTF-8'.

    
por 19.07.2012 / 08:23
2

Para determinar a ordem de classificação, basta criar um arquivo com um caractere diferente em cada linha e classificá-lo. A saída resultante informará a ordem de classificação.

    
por 19.07.2012 / 08:26
2

Como man sort diz, "ordem de dicionário" significa “Considere somente espaços em branco e caracteres alfanuméricos”. Por exemplo, dados os dados

The
!quick
brown
@fox
jumps
#over
17
$lazy
  dogs
%42
times.

o comando sort sem adornos produz

  dogs
!quick
#over
$lazy
%42
@fox
17
brown
jumps
The
times.

(colocando as linhas que começam com os caracteres do espaço e os símbolos ! , # , $ , % e @ 1 à frente das linhas que começam com letras e números; ou seja, caracteres alfanuméricos ), mas sort -d produz

  dogs
17
%42
brown
@fox
jumps
$lazy
#over
!quick
The
times.

  dogs ainda é o primeiro, porque começa com espaços mas os caracteres especiais (pontuação) são ignorados. 17 vem antes de 42 e fox vem entre brown e jumps , apesar do fato de que 42 e fox têm caracteres na frente deles que normalmente os moveria antes do 17 .

por 18.09.2014 / 18:29