¿Cuál es el orden predeterminado de la ordenación de Linux?


18

Durante un largo período, pensé que el comportamiento predeterminado del sortprograma era usar el orden ASCII. Sin embargo, cuando ingreso las siguientes líneas sortsin ningún argumento:

#
@

Tengo:

@
#

Pero según la tabla ASCII, #es 35 y @es 64. Otro ejemplo es:

A
a

Y la salida es:

a
A

¿Alguien puede explicar esto? Por cierto, ¿qué es "orden de diccionario" cuando se usa sort -d?


55
el orden de clasificación depende de su configuración regional
enero

2
Pero es el orden alfabético por defecto al menos en orden GNU.
jarno

Respuestas:


17

Parece que está utilizando una configuración regional que no es POSIX.

Tratar:

export LC_ALL=C

y luego sort.

info sort dice claramente:

(1) Si utiliza un entorno local que no sea POSIX (p. Ej., Al establecer 'LC_ALL' en 'en_US'), entonces 'sort' puede producir una salida que se ordena de manera diferente a la que está acostumbrado. En ese caso, establezca la variable de entorno 'LC_ALL' en 'C'. Tenga en cuenta que configurar solo 'LC_COLLATE' tiene dos problemas. Primero, no es efectivo si también se establece 'LC_ALL'. En segundo lugar, tiene un comportamiento indefinido si 'LC_CTYPE' (o 'LANG', si 'LC_CTYPE' no está establecido) está configurado en un valor incompatible. Por ejemplo, obtiene un comportamiento indefinido si 'LC_CTYPE' es 'ja_JP.PCK' pero 'LC_COLLATE' es 'en_US.UTF-8'.


3
El OP pregunta cuál es el orden de clasificación, no cómo cambiarlo.

1
Gracias, he probado en mi máquina y la configuración regional afecta el comportamiento de clasificación

3

Para determinar el orden de clasificación, simplemente cree un archivo con un carácter diferente en cada línea y ordénelo. El resultado resultante le dirá el orden de clasificación.


Bonita, sencilla y eficiente

1
Generalmente es una muy buena idea, pero no siempre es suficiente. No es necesario definir una intercalación solo en caracteres individuales. Algunas colaciones tratan "ae" como si fuera una ligadura, o tratan las ligaduras como si se hubieran descompuesto. Otro caso es que muchas intercalaciones tratan a 'a' y 'A' como iguales, pero el orden que ve al probar no le dice eso (puede decirle si el tipo es estable). Y una prueba de un solo carácter no indica si la expansión de tabulación, la normalización de espacios en blanco, etc. están vigentes. Sin embargo, es un muy buen lugar para comenzar.
TextGeek

1
(demasiado tarde para editar el comentario anterior): siempre que incluya un rango de caracteres lo suficientemente diverso, puede distinguir entre ignorar mayúsculas y minúsculas al ver (por ejemplo) aAbB en lugar de abAB.
TextGeek

2

Como man sortdice, "orden de diccionario" significa "considerar solo espacios en blanco y caracteres alfanuméricos". Por ejemplo, dados los datos

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

el sortcomando sin adornos produce

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

(poniendo las líneas que comienzan con los caracteres de espacio y los !, #, $, %, y @símbolos 1 por delante de las líneas que comienzan con las letras y números, es decir, caracteres alfanuméricos ), pero sort -dproduce

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

  dogssigue siendo el primero, porque comienza con espacios, pero se ignoran los caracteres especiales (puntuación).  17viene antes 42, y se foxinterpone entre browny jumps, a pesar del hecho de que 42y foxtiene personajes delante de ellos que normalmente los moverían antes del 17.
____________
1 en orden de sus valores ASCII: espacio = 040, != 041, #= 043, $= 044, %= 045 y@ = 0100. Tenga en cuenta que (sin tener en cuenta la barra espaciadora) esto es aproximadamente de izquierda a derecha en algunos teclados.


1
El orden en su primer ejemplo, donde el texto se ordena primero por puntuación, puede resultar si la configuración regional en efecto es C (como con LC_ALL = C) pero no en otras configuraciones regionales. La configuración regional predeterminada depende de la configuración del sistema operativo. Por lo tanto, un sin adornos sort debe ser diferente en muchas distribuciones.
Isaac
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.