2017-10-19 27 views
0

Les fichiers ci-dessous contiennent le même jeu de lignes dans un ordre différent. En fait, les deux ont déjà été triés via sort <filename> (vous pouvez essayer de les trier vous-même); cependant, les résultats montrent que les 4ème et 5ème lignes sont commutées les unes par rapport aux autres. Comment cela peut-il arriver? Pourquoi la commande sort du terminal trie-t-elle les fichiers dans un ordre différent?Différents résultats de "tri" des fichiers avec le même ensemble de textes

Fichier 1

w_±_± w_±_± 1 
w_˚ w_˚ 1 
w_ฌ w_ฌ 1 
w_㎡ w_㎡ 1 
w_ℓ w_ℓ 1 

Fichier 2:

w_±_± w_±_± 1 
w_˚ w_˚ 1 
w_ฌ w_ฌ 1 
w_ℓ w_ℓ 1 
w_㎡ w_㎡ 1 
+1

Ce genre de question ** vraiment ** doit spécifier les paramètres régionaux que vous utilisez, en particulier en ce qui concerne le type de caractère et l'ordre de classement. –

Répondre

0

Très intéressant! Cela doit être lié aux paramètres régionaux. Je peux l'obtenir pour travailler dans les paramètres régionaux C:

$ LC_ALL=C sort file1 
w_±_± w_±_± 1 
w_˚ w_˚ 1 
w_ฌ w_ฌ 1 
w_ℓ w_ℓ 1 
w_㎡ w_㎡ 1 

$ LC_ALL=C sort file2 
w_±_± w_±_± 1 
w_˚ w_˚ 1 
w_ฌ w_ฌ 1 
w_ℓ w_ℓ 1 
w_㎡ w_㎡ 1 

Au début, je pensais que cela pourrait être dû à la longueur des codes de caractères, donc peut-être le caractère est composé de deux octets où le premier octet est le même. Penchons-nous que:

$ printf 'w_ℓ w_ℓ 1' |hd; printf 'w_㎡ w_㎡ 1' |hd 
00000000 77 5f e2 84 93 20 77 5f e2 84 93 20 31   |w_... w_... 1| 
0000000d 
00000000 77 5f e3 8e a1 20 77 5f e3 8e a1 20 31   |w_... w_... 1| 
0000000d 

est e2 84 en est e3 8e, de sorte que ce n'est pas ce qui se passe ici. Ceci est probablement dû au fait que les paramètres régionaux indiquent que vous avez ignoré ces caractères pour une raison ou pour une autre. Ceci est vrai pour en_US.UTF-8 avec sort de GNU coreutils 8.28, au moins.