Comportement de "sort"

Le
François Meyer
C'est encore moi :

Quelqu'un peut-il m'expliquer le mécanisme de ce comportement de sort :

[fmeyer@galaxy taf]$ LANG=C sort -n grumpy
53263 102 11913
53263 102 11913
53293 90 10513
[fmeyer@galaxy taf]$ LANG=fr_FR sort -n grumpy
53293 90 10513
53263 102 11913
53263 102 11913

Merci.
--
François Meyer
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 3
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jean-Marc Bourguet
Le #17511601
François Meyer
C'est encore moi :

Quelqu'un peut-il m'expliquer le mécanisme de ce comportement de sort :

[ taf]$ LANG=C sort -n grumpy
53263 102 11913
53263 102 11913
53293 90 10513
[ taf]$ LANG=fr_FR sort -n grumpy
53293 90 10513
53263 102 11913
53263 102 11913



Je ne reproduis pas ici.

Bug dans ta version?

A+

--
Jean-Marc
Site de usenet-fr: http://www.usenet-fr.news.eu.org
Olivier Miakinen
Le #17511901
Le 13/10/2008 13:32, François Meyer a écrit :

Quelqu'un peut-il m'expliquer le mécanisme de ce comportement de sort :

[ taf]$ LANG=C sort -n grumpy
53263 102 11913
53263 102 11913
53293 90 10513
[ taf]$ LANG=fr_FR sort -n grumpy
53293 90 10513
53263 102 11913
53263 102 11913



Ce n'est pas moi qui pourrai l'expliquer.

$ LANG=C sort -n grumpy
53263 102 11913
53263 102 11913
53293 90 10513
$ LANG=fr_FR sort -n grumpy
53263 102 11913
53263 102 11913
53293 90 10513
Che Averell
Le #17511891
'lu

François Meyer
C'est encore moi :
Quelqu'un peut-il m'expliquer le mécanisme de ce comportement de sort :


<snip>

Juste une hypothèse : l'une des deux locales considère l'espace comme
un séparateur de milliers, et pas l'autre. Du coup, pour la première,
le nombre est sur tout la ligne, pour la seconde, elle ne prend que le
nombre sur la première colonne.

Merci.



De rien !
François Meyer
Le #17515171
Che Averell

'lu

François Meyer
C'est encore moi :
Quelqu'un peut-il m'expliquer le mécanisme de ce comportement de sort :


<snip>

Juste une hypothèse : l'une des deux locales considère l'espace comme
un séparateur de milliers, et pas l'autre. Du coup, pour la première,
le nombre est sur tout la ligne, pour la seconde, elle ne prend que le
nombre sur la première colonne.



Ça a l'air d'être ça. C'est complètement tordu :

# LC_NUMERIC=C sort -n /tmp/grumpy
2 1 3
13 2

# LC_NUMERIC=fr_FR sort -n /tmp/grumpy
13 2
2 1 3

Donc dans fr_FR, l'espace n'est pas un séparateur,
il est complètement ignoré...

C'est quand même bug-ifère d'origine, non ?

Ici j'ai :

1 ubuntu 8.04.1 affectée,
2 debian 4.0 affectées,

1 debian 3.1 pas affectée,
1 rh9 pas affectée,
1 rh8 pas affectée,
1 rh7.2 pas affectée
--
François Meyer
Olivier Miakinen
Le #17515161
Le 13/10/2008 17:55, François Meyer a écrit :

[...] dans fr_FR, l'espace n'est pas un séparateur,
il est complètement ignoré...

C'est quand même bug-ifère d'origine, non ?



[OUI]
Nicolas George
Le #17515481
François Meyer wrote in message
C'est quand même bug-ifère d'origine, non ?



Avoir autre chose que C/POSIX pour LC_NUMERIC ou LC_COLLATE est de toutes
façons source de bugs.
Paul Gaborit
Le #17519011
À (at) Mon, 13 Oct 2008 18:03:34 +0200,
Olivier Miakinen
Le 13/10/2008 17:55, François Meyer a écrit :

[...] dans fr_FR, l'espace n'est pas un séparateur,
il est complètement ignoré...

C'est quand même bug-ifère d'origine, non ?



[OUI]



Ou utiliser :

sort -n -k1,1

ou :

sort -g

--
Paul Gaborit -
François Meyer
Le #17521151
Paul Gaborit

À (at) Mon, 13 Oct 2008 18:03:34 +0200,
Olivier Miakinen
Le 13/10/2008 17:55, François Meyer a écrit :

[...] dans fr_FR, l'espace n'est pas un séparateur,
il est complètement ignoré...

C'est quand même bug-ifère d'origine, non ?



[OUI]



Ou utiliser :

sort -n -k1,1

ou :

sort -g



sort -g paraît raisonnable, mais j'ai du mal à comprendre par
quel mécanisme "sort -n -k1,1" peut fonctionner là où "sort -n" échoue.
Enfin bon...

Merci à tout le monde.
--
François Meyer
Nicolas George
Le #17521391
François Meyer wrote in message
mais j'ai du mal à comprendre par
quel mécanisme "sort -n -k1,1" peut fonctionner là où "sort -n" échoue.



Le découpage en champs fait par -k 1,1 se passe en premier, en utilisant
l'espace comme séparateur de champ. Le résultat, c'est à dire le premier
champ, est ensuite passé à la comparaison numérique. C'est cette comparaison
numérique qui ignore les espaces. Mais comme il n'y a plus d'espace à cette
étape...
François Meyer
Le #17521761
Nicolas George
François Meyer wrote in message
mais j'ai du mal à comprendre par
quel mécanisme "sort -n -k1,1" peut fonctionner là où "sort -n" échoue.



Le découpage en champs fait par -k 1,1 se passe en premier, en utilisant
l'espace comme séparateur de champ. Le résultat, c'est à dire le premier
champ, est ensuite passé à la comparaison numérique. C'est cette comparaison
numérique qui ignore les espaces. Mais comme il n'y a plus d'espace à cette
étape...



sort -n passerait donc une ligne entière au comparateur qui
demanderait au "localisateur" de lui fournir les champs ?

Bon et on peut remonter à quelqu'un le comportement
aberrant du "localisateur" fr quant aux espaces dans les nombres ?
--
François Meyer
Publicité
Poster une réponse
Anonyme