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

commande 'sort' et la localisation...

11 réponses
Avatar
Frédéric BOITEUX
Bonjour,

Je viens de tomber sur un fait curieux : en utilisant 'sort' sur un fichi=
er
contenant des lignes commen=E7ant par des '#', je me suis aper=E7u que sort=
les
ignorait et triait ces lignes d'apr=E8s les caract=E8res qui suivent ces di=
=E8ses !
Du coup, les diff=E9rentes lignes commen=E7ant par ces di=E8ses ne sont pas=
regroup=E9es
mais dispers=E9es d'apr=E8s leur contenu :

$ echo "A
B
C
## A
## D" | sort
A
## A
B
C
## D

Ceci avec la locale fran=E7aise. Mais en locale US, cela donne :
$ echo "A
B
C
## A
## D" | env LC_ALL=3DC sort
## A
## D
A
B
C

Je ne m'attendais pas =E0 cela (j'ai mis un moment avant de comprendre qu=
e cela
venait de la localisation), et surtout je n'ai rien trouv=E9 l=E0-dessus da=
ns les
pages de manuel de sort (en anglais ni en fran=E7ais...)

Fred.

10 réponses

1 2
Avatar
Frédéric BOITEUX
Le mar 20 déc 2005 14:10:03 CET, Patrice Karatchentzeff
a écrit :

de mémoire, je dirai que les pages de manuel ne sont pas à jour... tu
retrouves ces problèmes avec ls, etc. (en fait tous les outils GNU).
Je crois que c'est documenté dans la libc...

Désolé pour les imprécisions : c'est tout de mémoire...



Salut Patrice,

Merci de l'info, on en parle un peu effectivement dans la doc de la libc. ..
Il semble que ce soit la définition des 'Collation Functions' qui entrent en
jeu. Dans mon précédent exemple, il suffit de faire env LC_COLLATE=C sort pour
obtenir le tri que j'attendais.
Ce que je me demande, c'est comment en savoir plus sur les définitions de la
localisation française (et notamment sur ces ordres de tri ...)

Fred.
Avatar
Patrice Karatchentzeff
2005/12/20, Frédéric BOITEUX :
Bonjour,

Je viens de tomber sur un fait curieux : en utilisant 'sort' sur un fic hier
contenant des lignes commençant par des '#', je me suis aperçu que so rt les
ignorait et triait ces lignes d'après les caractères qui suivent ces dièses !



[...]

Je ne m'attendais pas à cela (j'ai mis un moment avant de comprendre que cela
venait de la localisation), et surtout je n'ai rien trouvé là-dessus dans les
pages de manuel de sort (en anglais ni en français...)




de mémoire, je dirai que les pages de manuel ne sont pas à jour... tu
retrouves ces problèmes avec ls, etc. (en fait tous les outils GNU).
Je crois que c'est documenté dans la libc...

Désolé pour les imprécisions : c'est tout de mémoire...

PK

--
| _,,,---,,_ Patrice KARATCHENTZEFF
ZZZzz /,`.-'`' -. ;-;;,_ mailto:
|,4- ) )-,_. , ( `'-' http://p.karatchentzeff.free.fr
'---''(_/--' `-'_)
Avatar
Jacques L'helgoualc'h
Frédéric BOITEUX a écrit, mardi 20 décembre 2005, à 14:06 :
Bonjour,



bonjour,

Je viens de tomber sur un fait curieux : en utilisant 'sort' sur un fichier
contenant des lignes commençant par des '#', je me suis aperçu que sort les
ignorait et triait ces lignes d'après les caractères qui suivent ces dièses !


[...]
Je ne m'attendais pas à cela (j'ai mis un moment avant de comprendre que cela
venait de la localisation), et surtout je n'ai rien trouvé là-dessus dans les
pages de manuel de sort (en anglais ni en français...)



Cf. archives DUF « Chiffres romains, locale et tri », du 19 juin 2005.

ça m'agace aussi pour ls :

$ ls -1 foo*
foo.aux
foobar.aux
foobar.dvi
foobar.tex
foo.dvi
foo.tex

En passant en locale belge ou suisse ça ne le fait plus...
--
Jacques L'helgoualc'h


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Denis Barbier
On Tue, Dec 20, 2005 at 02:17:17PM +0100, Frédéric BOITEUX wrote:
Le mar 20 déc 2005 14:10:03 CET, Patrice Karatchentzeff
a écrit :

> de mémoire, je dirai que les pages de manuel ne sont pas à jour... tu
> retrouves ces problèmes avec ls, etc. (en fait tous les outils GNU).
> Je crois que c'est documenté dans la libc...
>
> Désolé pour les imprécisions : c'est tout de mémoire...

Salut Patrice,

Merci de l'info, on en parle un peu effectivement dans la doc de la libc...
Il semble que ce soit la définition des 'Collation Functions' qui entrent en
jeu. Dans mon précédent exemple, il suffit de faire env LC_COLLATE=C sort pour
obtenir le tri que j'attendais.
Ce que je me demande, c'est comment en savoir plus sur les définitions de la
localisation française (et notamment sur ces ordres de tri ...)



La dernière partie de mon exposé lors de debconf5 donne les principes de base
http://people.debian.org/~barbier/talks/debconf5/glibc-locale.pdf

Denis


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Frédéric BOITEUX
Le mar 20 déc 2005 15:40:25 CET, Denis Barbier a écrit :

La dernière partie de mon exposé lors de debconf5 donne les principes de base
http://people.debian.org/~barbier/talks/debconf5/glibc-locale.pdf



Merci, cela a l'air bien intéressant et demande un examen approfondi,
mais ce que je me demandais, c'est s'il y a une commande qui indique *comme nt*
est faite la locate courante : ce qu'elle « contient » ? quels sont d éfinitions
utilisées ? Mais peut-être est-ce seulement dans le source de la libc ?

Fred.
Avatar
Denis Barbier
On Tue, Dec 20, 2005 at 03:59:30PM +0100, Frédéric BOITEUX wrote:
Le mar 20 déc 2005 15:40:25 CET, Denis Barbier a écrit :

> La dernière partie de mon exposé lors de debconf5 donne les principes de base
> http://people.debian.org/~barbier/talks/debconf5/glibc-locale.pdf
>
Merci, cela a l'air bien intéressant et demande un examen approfondi,
mais ce que je me demandais, c'est s'il y a une commande qui indique
*comment* est faite la locate courante : ce qu'elle « contient » ?



La commande locale permet de récupérer beaucoup d'informations, mais
pas celles concernant LC_COLLATE.

quels sont définitions utilisées ? Mais peut-être est-ce seulement
dans le source de la libc ?



Oui, plus exactement dans /usr/share/i18n/locales/fr_FR
Quand tu compiles une locale ou fr_FR.UTF-8, ce fichier et
d'autres dans /usr/share/i18n sont lus et génèrent une version compilée
dans /usr/lib/locale/ qui peut être utilisée par les fonctions de la
libc.
Si tu édites ce fichier, tu vois que la section LC_COLLATE ne fait
que copier la même section dans /usr/share/i18n/locales/iso14651_t1
Le caractère # est
<U0023> IGNORE;IGNORE;IGNORE;<U0023> # 91 #
ce qui implique qu'il n'intervient que dans les comparaisons de 4e
niveau. Mais tu devrais commencer par lire le document ci-dessus ;)

Denis


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Frédéric BOITEUX
Le mar 20 déc 2005 18:04:05 CET, Denis Barbier a écrit :

La commande locale permet de récupérer beaucoup d'informations, mais
pas celles concernant LC_COLLATE.



oui, c'est la seule fonction que je connaissais.

Oui, plus exactement dans /usr/share/i18n/locales/fr_FR
Quand tu compiles une locale ou fr_FR.UTF-8, ce fichier et
d'autres dans /usr/share/i18n sont lus et génèrent une version compil ée
dans /usr/lib/locale/ qui peut être utilisée par les fonctions de la
libc.
Si tu édites ce fichier, tu vois que la section LC_COLLATE ne fait
que copier la même section dans /usr/share/i18n/locales/iso14651_t1
Le caractère # est
<U0023> IGNORE;IGNORE;IGNORE;<U0023> # 91 #



Ok, merci de l'info, ce n'était pas évident à trouver (j'avais trouv é
ce fichier... dans ta doc !), mais son interprétation n'est pas évident e !

ce qui implique qu'il n'intervient que dans les comparaisons de 4e
niveau. Mais tu devrais commencer par lire le document ci-dessus ;)



J'ai déjà commencé, et je le lirai sûrement en entier quand j'aurai un moment
de libre !

Merci et bonne journée,

Fred.
Avatar
Jacques L'helgoualc'h
Frédéric BOITEUX a écrit, mercredi 21 décembre 2005, à 07:51 :
Le mar 20 déc 2005 18:04:05 CET, Denis Barbier a écrit :


[...]
> Oui, plus exactement dans /usr/share/i18n/locales/fr_FR
> Quand tu compiles une locale ou fr_FR.UTF-8, ce fichier et
> d'autres dans /usr/share/i18n sont lus et génèrent une version compilée
> dans /usr/lib/locale/ qui peut être utilisée par les fonctions de la
> libc.
> Si tu édites ce fichier, tu vois que la section LC_COLLATE ne fait
> que copier la même section dans /usr/share/i18n/locales/iso14651_t1
> Le caractère # est
> <U0023> IGNORE;IGNORE;IGNORE;<U0023> # 91 #

Ok, merci de l'info, ce n'était pas évident à trouver (j'avais trouvé
ce fichier... dans ta doc !), mais son interprétation n'est pas évidente !



Elle n'explique pas la différence de comportement de sort (et ls) quand
on bascule entre fr_FR et fr_BE (qui charge la /même/ définition).

L'option -d de sort permet d'ignorer si besoin les caractères non
alphanumériques --- mais en fr_FR, ça devient systématique...
--
Jacques L'helgoualc'h


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Denis Barbier
On Wed, Dec 21, 2005 at 10:17:44AM +0100, Jacques L'helgoualc'h wrote:
Frédéric BOITEUX a écrit, mercredi 21 décembre 2005, à 07:51 :
> Le mar 20 déc 2005 18:04:05 CET, Denis Barbier a écrit :
[...]
> > Oui, plus exactement dans /usr/share/i18n/locales/fr_FR
> > Quand tu compiles une locale ou fr_FR.UTF-8, ce fichier et
> > d'autres dans /usr/share/i18n sont lus et génèrent une version compilée
> > dans /usr/lib/locale/ qui peut être utilisée par les fonctions de la
> > libc.
> > Si tu édites ce fichier, tu vois que la section LC_COLLATE ne fait
> > que copier la même section dans /usr/share/i18n/locales/iso14651_t1
> > Le caractère # est
> > <U0023> IGNORE;IGNORE;IGNORE;<U0023> # 91 #
>
> Ok, merci de l'info, ce n'était pas évident à trouver (j'avais trouvé
> ce fichier... dans ta doc !), mais son interprétation n'est pas évidente !

Elle n'explique pas la différence de comportement de sort (et ls) quand
on bascule entre fr_FR et fr_BE (qui charge la /même/ définition).



S'il y a des différences, c'est qu'une des locales a été correctement
générée et l'autre non, cette dernière utilise alors la locale C.

Denis


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Jacques L'helgoualc'h
Denis Barbier a écrit, mercredi 28 décembre 2005, à 19:40 :
On Wed, Dec 21, 2005 at 10:17:44AM +0100, Jacques L'helgoualc'h wrote:


[...]
> Elle n'explique pas la différence de comportement de sort (et ls) quand
> on bascule entre fr_FR et fr_BE (qui charge la /même/ définition).

S'il y a des différences, c'est qu'une des locales a été correctement
générée et l'autre non, cette dernière utilise alors la locale C.



Ah, OK, merci.


Ce qui me gêne là-dedans, c'est de voir que « sort = sort -d » en
français, sans pouvoir le désactiver pour l'affichage des répertoires...

Outre l'exemple foo.{aux,tex} + foobar.{aux,tex} --- le point est tout
de même assez courant dans les noms de fichiers --- j'ai aussi ça :

.tmp $ ls -l
total 8
-rw-r--r-- 1 lhh lhh 0 2005-12-28 23:15 Aalto
-rw-r--r-- 1 lhh lhh 0 2005-12-28 23:15 anneaux
-rw-r--r-- 1 lhh lhh 0 2005-12-28 23:15 lune
-rw-r--r-- 1 lhh lhh 0 2005-12-28 23:15 Lyre
drwxr-xr-x 2 lhh lhh 4096 2005-12-28 23:19 tmp
.tmp $ mv -v [a-l]* tmp/
`Aalto' -> `tmp/Aalto'
`anneaux' -> `tmp/anneaux'
`lune' -> `tmp/lune'
.tmp $ ls -l
total 8
-rw-r--r-- 1 lhh lhh 0 2005-12-28 23:15 Lyre
drwxr-xr-x 2 lhh lhh 4096 2005-12-28 23:20 tmp

Pourquoi Aalto bouge-t-il, et pas Lyre ? Comme comportement /par
défaut/, ça me paraît incohérent...
--
Jacques L'helgoualc'h


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
1 2