Que se passe-t-il dans l'extrait de code suivant? Je n'obtiens pas la sortie attendue.
Je pense que c'était un bug, mais cela arrive pour 2 programmes différents (uniq et sort), donc je soupçonne que c'est quelque chose à voir avec ... eh bien, je ne sais pas quoi ... d'où la question.
Les 3 premiers (sur 4) exemples fonctionnent, mais le 4ème échoue!.
Je m'attendrais au même comportement pour tous les personnages.
c'est à dire. pour imprimer 2 lignes (à partir des 3 lignes d'entrée) ... mais dans le 4ème cas, je n'ai qu'une ligne (pour les deux sort -u
et uniq
); les deux lins identiques disparaissent!
J'ai converti la sortie '\ n' en espace pour la compacité de la vue.
J'utilise uniq et je trie depuis (GNU coreutils) 7.4 ... fonctionnant sur le bureau Ubuntu 10.04.3 LTS.
Le scénario:
{
locale -k LC_COLLATE
echo
for c1 in x 〼 ;do
for c2 in z 〇 ;do
echo -n "asis : "; echo -e "$c1\n$c2\n$c2" |tr '\n' ' ';echo
echo -n "uniq : "; echo -e "$c1\n$c2\n$c2" |uniq |tr '\n' ' ';echo
echo -n "sort -u: "; echo -e "$c1\n$c2\n$c2" |sort -u |tr '\n' ' ';echo
echo
done
echo
done
}
Le résultat:
collate-nrules=4
collate-rulesets=""
collate-symb-hash-sizemb=2081
collate-codeset="UTF-8"
asis : x z z
uniq : x z
sort -u: x z
asis : x 〇 〇
uniq : x 〇
sort -u: 〇 x
asis : 〼 z z
uniq : 〼 z
sort -u: 〼 z
asis : 〼 〇 〇
uniq : 〼
sort -u: 〼
# In the last example (of 4) where did the '〇' go? .. U+3007 IDEOGRAPHIC NUMBER ZERO
#
sort -u
et uniq
fonctionne LC_COLLATE=C; echo -e "〼\n〇\n〇" |sort -u
|uniq
sort
seul (sans l' option -u ) ... ne gobe pas les caractères .. Ce qui entre, sort ... Cependant, comme on peut s'y attendre en expliquant Gilles des caractères unicodes "exotiques" ayant la même valeur canonique , ceux-ci les caractères ne sont pas triés, à part le fait qu'ils sont sortis en tant que groupe FIFO non trié en "haut" de la sortie du tri ... Il y a donc vraiment deux problèmes ici: 1. Les caractères ne sont pas triés comme ils le seraient "naïvement" "attendu, et 2. La caractéristique" unique "des deuxsort
et deuniq
perdre des données (dans certains cas).