OVH Cloud OVH Cloud

gnu sort : quelle alternative ?

12 réponses
Avatar
Philippe Naudin
Bonjour,

Je cherche un sort(1) qui puisse trier un texte 8 bits selon l'ordre des
octets, sans les finasseries de Gnu sort.

Un exemple valant mieux qu'une longue explication, voici ce que
j'obtiens (a et b peuvent être des chaînes quelconques) :
$ echo 'a b
b b
b' | sort
a b
b
b b

Voila ce que je souhaite :
b
a b
b b

Et : oui, c'est quand même pour un Gnu Linux :))

Quelqu'un connaît une solution ?

Merci,


--
Philippe Naudin
Cette adresse est valide.
Elle rejette le html, et les pièces attachées
avec une extension (exe|bat|pif|com|scr|zip).

10 réponses

1 2
Avatar
Sébastien Monbrun aka TiChou
Dans le message <news:,
*Philippe Naudin* tapota sur f.c.o.unix :

Bonjour,

Je cherche un sort(1) qui puisse trier un texte 8 bits selon l'ordre des
octets, sans les finasseries de Gnu sort.


Ça tombe bien, GNU sort le fait.

Un exemple valant mieux qu'une longue explication, voici ce que
j'obtiens (a et b peuvent être des chaînes quelconques) :
$ echo 'a b
b b
b' | sort
a b
b
b b


Ça, c'est un tri effectué avec une locale particulière.

$ echo -e 'a bnb bn b' | LC_ALL=fr_FR sort
a b
b
b b


Voila ce que je souhaite :
b
a b
b b


Ça c'est un tri « normal/standard », avec la locale C ou POSIX.

$ echo -e 'a bnb bn b' | LC_ALL=C sort
b
a b
b b


man sort

*** WARNING *** The locale specified by the environment affects sort order.
Set LC_ALL=C to get the traditional sort order that uses native byte values.

--
Sébastien Monbrun aka TiChou

Avatar
Philippe Naudin
Le jeudi 14 décembre 2006 à 18:49:33,
Sébastien Monbrun aka TiChou a écrit:

...
man sort

*** WARNING *** The locale specified by the environment affects sort
order. Set LC_ALL=C to get the traditional sort order that uses
native byte values.


Le gag, c'est que cette information n'est pas présente dans la version
française du manuel de sort (celle présente sur mon micro, en tous cas).
Il fallait effectivement penser à consulter la version originale !

Merci de m'avoir réconcilié avec Gnu sort !


--
Philippe Naudin
Cette adresse est valide.
Elle rejette le html, et les pièces attachées
avec une extension (exe|bat|pif|com|scr|zip).

Avatar
Paul Gaborit
À (at) Thu, 14 Dec 2006 18:22:44 +0100,
Philippe Naudin écrivait (wrote):
Je cherche un sort(1) qui puisse trier un texte 8 bits selon l'ordre des
octets, sans les finasseries de Gnu sort.

Un exemple valant mieux qu'une longue explication, voici ce que
j'obtiens (a et b peuvent être des chaînes quelconques) :
$ echo 'a b
b b
b' | sort
a b
b
b b

Voila ce que je souhaite :
b
a b
b b

Et : oui, c'est quand même pour un Gnu Linux :))

Quelqu'un connaît une solution ?


Il suffit de changer le 'locale' courant :

$ LANG=C sort file

('file' est le fichier à trier...)

Selon vos règlages, il est possible que le 'locale' soit précisé
directement par des variables LC_* (qui sont prioritaires sur
LANG). Dans ce cas, la variable qui compte, c'est LC_COLLATE :

$ LC_COLLATE=C sort file

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>

Avatar
Nicolas George
Philippe Naudin wrote in message
:
Le gag, c'est que cette information n'est pas présente dans la version
française du manuel de sort (celle présente sur mon micro, en tous cas).
Il fallait effectivement penser à consulter la version originale !


On le répète encore une fois : il ne faut jamais consulter les traductions
des documentations, elles ne sont jamais à jour.

Avatar
Paul Gaborit
À (at) Thu, 14 Dec 2006 19:28:48 +0100,
Philippe Naudin écrivait (wrote):
Le jeudi 14 décembre 2006 à 18:49:33,
Sébastien Monbrun aka TiChou a écrit:

...
man sort

*** WARNING *** The locale specified by the environment affects sort
order. Set LC_ALL=C to get the traditional sort order that uses
native byte values.


Le gag, c'est que cette information n'est pas présente dans la version
française du manuel de sort (celle présente sur mon micro, en tous ca s).
Il fallait effectivement penser à consulter la version originale !


C'est le gros défaut de ces traductions. Elles ne sont pas à jour ou
incomplètes (je ne critique pas car je connais l'ampleur de la
tâche... je constate juste). Mais, là encore, le 'locale' aide :

$ LANG=C man sort

et on a la page de 'man' originale et, le plus souvent, à jour.

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>


Avatar
Philippe Naudin
Le jeudi 14 décembre 2006 à 19:39:33,
Paul Gaborit a écrit:

...
Selon vos règlages, il est possible que le 'locale' soit précisé
directement par des variables LC_* (qui sont prioritaires sur
LANG). Dans ce cas, la variable qui compte, c'est LC_COLLATE :

$ LC_COLLATE=C sort file


Merci pour cette indication. J'ai modifié /etc/sysconfig/i18n (qui
contient, sur mon système, les locales par défaut) : je ne me ferais
plus avoir par sort.

Je profite honteusement de l'occasion : et pour man, quelle est la
variable prioritaire ? Je suis obligé de faire :
LC_MESSAGES=C LANG=C man sort
pour obtenir l'aide en V.O. J'ai par défaut :
$ locale
LANG=
LC_CTYPE=
LC_NUMERIC=""
LC_TIME=""
LC_COLLATE=C
LC_MONETARY=""
LC_MESSAGES=
LC_PAPER=""
LC_NAME=""
LC_ADDRESS=""
LC_TELEPHONE=""
LC_MEASUREMENT=""
LC_IDENTIFICATION=""
LC_ALL (la variable NLSPATH n'existe pas)

Cordialement,


--
Philippe Naudin
Cette adresse est valide.
Elle rejette le html, et les pièces attachées
avec une extension (exe|bat|pif|com|scr|zip).

Avatar
Nicolas George
Philippe Naudin wrote in message
:
Je profite honteusement de l'occasion : et pour man, quelle est la
variable prioritaire ?


LC_MESSAGES, comme tu pouvais t'en rendre compte en essayant.




Beurk.

Avatar
Philippe Naudin
Le jeudi 14 décembre 2006 à 20:21:40,
Nicolas George <nicolas$ a écrit:

Philippe Naudin wrote in message
:
Je profite honteusement de l'occasion : et pour man, quelle est la
variable prioritaire ?


LC_MESSAGES, comme tu pouvais t'en rendre compte en essayant.


Oui, mais non :-) Il me faut bien les deux (LC_MESSAGES *et* LANG),
sinon j'obtiens un texte en français :

LC_MESSAGES=C LANG= man man
LC_MESSAGES= LANG=C man man
me donnent tous deux un texte en anglais, alors que

LC_MESSAGES=C LANG= man man
LC_MESSAGES= LANG=C man man
me donnent tous deux un texte en français.

Bon, c'est quelque chose que je peux gérer : pas grave !




Beurk.


Oh, j'ai fait pire ! D'habitude, ça me convient. Pour sort en revanche,
je n'avais pas pigé l'origine du problème.

Cordialement,


--
Philippe Naudin
Cette adresse est valide.
Elle rejette le html, et les pièces attachées
avec une extension (exe|bat|pif|com|scr|zip).


Avatar
Nicolas George
Philippe Naudin wrote in message
:
LC_MESSAGES=C LANG= man man
LC_MESSAGES= LANG=C man man
me donnent tous deux un texte en français.


Pour le premier, ça me paraît tout à fait suspect.

Avatar
Paul Gaborit
À (at) 14 Dec 2006 22:09:27 GMT,
Nicolas George <nicolas$ écrivait (wrote):
Philippe Naudin wrote in message
:
LC_MESSAGES=C LANG= man man
LC_MESSAGES= LANG=C man man
me donnent tous deux un texte en français.


Pour le premier, ça me paraît tout à fait suspect.


Dans l'absolu, c'est effectivement LC_MESSAGES qui devrait décider de
la langue d'affichage des pages de man. En pratique, il semble que
'man' utilise LANG pour choisir la traduction à afficher et
LC_MESSAGES pour ses propres messages !

Et ça, c'est expliquer dans la page de man de man (en anglais comme en
français).

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>


1 2