Quel est l'ordre par défaut du tri Linux?


18

Pendant une longue période, j'ai pensé que le comportement par défaut du sortprogramme utilisait l'ordre ASCII. Cependant, lorsque j'entre les lignes suivantes sortsans aucun argument:

#
@

J'ai eu:

@
#

Mais selon le tableau ASCII, #est 35 et @est 64. Un autre exemple est:

A
a

Et la sortie est:

a
A

Quelqu'un peut-il expliquer cela? Au fait, qu'est-ce que «l'ordre du dictionnaire» lors de l'utilisation sort -d?


5
l'ordre de tri dépend de vos paramètres régionaux
janneb

2
Mais c'est par ordre alphabétique par défaut au moins en genre GNU.
jarno

Réponses:


17

Il semble que vous utilisiez un environnement local non-POSIX.

Essayer:

export LC_ALL=C

et puis sort.

info sort dit clairement:

(1) Si vous utilisez un environnement local non-POSIX (par exemple, en définissant «LC_ALL» sur «en_US»), alors «sort» peut produire une sortie triée différemment de ce à quoi vous êtes habitué. Dans ce cas, définissez la variable d'environnement `LC_ALL 'sur` C'. Notez que la définition de «LC_COLLATE» uniquement pose deux problèmes. Tout d'abord, il est inefficace si `LC_ALL 'est également défini. Deuxièmement, il a un comportement indéfini si `LC_CTYPE '(ou` LANG', si `LC_CTYPE 'n'est pas défini) est défini sur une valeur incompatible. Par exemple, vous obtenez un comportement indéfini si «LC_CTYPE» est «ja_JP.PCK» mais «LC_COLLATE» est «en_US.UTF-8».


3
L'OP demande quel est l'ordre de tri, pas comment le changer.

1
Merci, j'ai testé sur ma machine et les paramètres régionaux affectent le comportement de tri

3

Pour déterminer l'ordre de tri, créez simplement un fichier avec un caractère différent sur chaque ligne et triez-le. La sortie résultante vous indiquera l'ordre de tri.


Agréable, simple et efficace

1
Généralement une très bonne idée, mais ce n'est pas toujours suffisant. Un classement n'a pas besoin d'être défini uniquement sur des caractères individuels. Certaines collations traitent "ae" comme s'il s'agissait d'une ligature, ou traitent les ligatures comme si elles étaient décomposées. Un autre cas est que de nombreux classements traitent «a» et «A» comme égaux, mais l'ordre que vous voyez en testant ne vous le dit pas (il peut vous dire si le tri est stable). Et un test à un caractère ne dit pas si l'expansion des tabulations, la normalisation des espaces blancs, etc. sont en vigueur. Néanmoins, c'est un très bon point de départ.
TextGeek

1
(trop tard pour modifier le commentaire précédent) - tant que vous incluez en fait une gamme suffisamment diversifiée de caractères, vous pouvez dire ignorer la casse de voir (par exemple) aAbB au lieu d'abAB.
TextGeek

2

Comme man sort dit, «ordre du dictionnaire» signifie «ne considérer que les blancs et les caractères alphanumériques». Par exemple, compte tenu des données

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

les sans ornements sort commande produit

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

(mettre les lignes qui commencent par les caractères de l' espace et les !, #, $, %et @symboles 1 avant les lignes qui commencent par les lettres et les chiffres, à savoir, des caractères alphanumériques ), maissort -d produit

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

  dogsest toujours le premier, car il commence par des espaces, mais les caractères spéciaux (ponctuation) sont ignorés.  17vient avant 42, et foxentre brownet jumps, malgré le fait que 42et foxavoir des personnages devant eux qui les déplaceraient normalement avant le 17.
____________
1 dans l'ordre de leurs valeurs ASCII: espace = 040, != 041, #= 043, $= 044, %= 045 et @= 0100. Notez que (sans tenir compte de la barre d'espace), il s'agit approximativement de l'ordre de gauche à droite sur certains claviers.


1
L'ordre dans votre premier exemple, où le texte est d'abord trié à la ponctuation, peut se produire si les paramètres régionaux en vigueur sont C (comme avec LC_ALL = C) mais pas dans d'autres paramètres régionaux. Les paramètres régionaux par défaut dépendent des paramètres du système d'exploitation. Ainsi, un sans ornement sort devrait être différent dans de nombreuses distributions.
Isaac
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.