Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Comportement de "sort"

26 réponses
Avatar
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

10 réponses

1 2 3
Avatar
Jean-Marc Bourguet
François Meyer writes:

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
Avatar
Olivier Miakinen
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
Avatar
Che Averell
'lu

François Meyer écrit :
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 !
Avatar
François Meyer
Che Averell wrote:

'lu

François Meyer écrit :
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
Avatar
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]
Avatar
Nicolas George
François Meyer wrote in message
<48f36f76$0$1070$:
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.
Avatar
Paul Gaborit
À (at) Mon, 13 Oct 2008 18:03:34 +0200,
Olivier Miakinen <om+ écrivait (wrote):
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 - <http://perso.enstimac.fr/~gaborit/>
Avatar
François Meyer
Paul Gaborit wrote:

À (at) Mon, 13 Oct 2008 18:03:34 +0200,
Olivier Miakinen <om+ écrivait (wrote):
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
Avatar
Nicolas George
François Meyer wrote in message
<48f4458e$0$31357$:
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...
Avatar
François Meyer
Nicolas George <nicolas$ wrote:
François Meyer wrote in message
<48f4458e$0$31357$:
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
1 2 3