Contenu | Rechercher | Menus

Annonce

DVD, clés USB et t-shirts Ubuntu-fr disponibles sur la boutique En Vente Libre

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 28/09/2022, à 16:53

claudius01

[Résolu] Comportement de 'sort' avec le caractère '-'

Bonjour,

Sur le fichier texte suivant:

$ cat TestSortPrenoms.txt
Jean Sébastien V.
Jean L.
Jean-François L.
Jean-René M.
Jean-Louis C.
Jeanne L.
Jean F.
Jeannine M.
Jean-Paul C.
Jean A.
Jean-Pierre L.

Si j'applique un simple "sort", j'obtiens:

$ cat TestSortPrenoms.txt | sort
Jean A.
Jean F.
Jean L.
Jean Sébastien V.
Jean-François L.
Jean-Louis C.
Jeanne L.
Jeannine M.
Jean-Paul C.
Jean-Pierre L.
Jean-René M.

avec 'Jeanne' et 'Jeannine' qui s'intercalent entre 'Jean-Louis' et 'Jean-Paul' ?!..
Les autres lignes étant bien triées

Maintenant, je m'attendais plutôt au résultat suivant obtenu avec la bidouille "cat TestSortPrenoms.txt | tr  '-'  '@' | sort | tr  '@'  '-'":

Jean A.
Jean F.
Jean L.
Jean Sébastien V.
Jean-François L.
Jean-Louis C.
Jean-Paul C.
Jean-Pierre L.
Jean-René M.
Jeanne L.
Jeannine M.

- Confirmez vous ce comportement ?
- Si oui, comment l'expliquer !
- Sinon, j'insérerai ma bidouille pour avoir le résultat attendu ;-)

Merci par avance

Dernière modification par claudius01 (Le 29/09/2022, à 08:49)

Hors ligne

#2 Le 28/09/2022, à 17:22

erresse

Re : [Résolu] Comportement de 'sort' avec le caractère '-'

Apparemment, on peut obtenir que le tri utilise la valeur native des octets en faisant précéder la commande de la variable d'environnement "LC_ALL=C". L'ordre doit alors correspondre à ce que tu veux.

LC_ALL=C sort TestSortPrenoms.txt

Il semblerait que la bizarrerie soit liée à la locale... sans garantie aucune de ma part.
Je pense que sans autre précision, "sort" doit ignorer les espaces et tirets, tout simplement.


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois résolu, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#3 Le 28/09/2022, à 17:30

claudius01

Re : [Résolu] Comportement de 'sort' avec le caractère '-'

Merci erresse

Effectivement, c'est bcp mieux avec la commande suivante:

$ LC_ALL=C sort TestSortPrenoms.txt
Jean A.
Jean F.
Jean L.
Jean Sébastien V.
Jean-François L.
Jean-Louis C.
Jean-Paul C.
Jean-Pierre L.
Jean-René M.
Jeanne L.
Jeannine M.

Faut maintenant que je la transforme car le 'sort' est utilisé via un pipe

Edit:
Je confirme que le 'sort' ignore les caractères '-' (mais pas les blancs ' ') car en partant du fichier duquel j'ai supprimé ces '-':

$ cat TestSortPrenoms.txt
Jean Sébastien V.
Jean L.
JeanFrançois L.
JeanRené M.
JeanLouis C.
Jeanne L.
Jean F.
Jeannine M.
JeanPaul C.
Jean A.
JeanPierre L.

j'obtiens:

$ sort TestSortPrenoms.txt
Jean A.
Jean F.
Jean L.
Jean Sébastien V.
JeanFrançois L.
JeanLouis C.
Jeanne L.
Jeannine M.
JeanPaul C.
JeanPierre L.
JeanRené M.

avec 'Jeanne' et 'Jeannine' qui s'intercalent entre 'JeanLouis' et 'JeanPaul' car le 'n' minuscule est interprété comme étant entre le 'L' et le 'P' majuscule
=> Pas sympa quand même ;-((

Dernière modification par claudius01 (Le 28/09/2022, à 18:13)

Hors ligne

#4 Le 28/09/2022, à 18:57

soshy

Re : [Résolu] Comportement de 'sort' avec le caractère '-'

Je sais pas ce que tu as de configuré comme locale, mais c'est vraiment ça qui te fait changer tes résultats.
Et je ne suis pas sûr de voir en quoi le pipe est un problème...

cat test2.txt | LC_ALL='en_US.UTF8' sort
Jean A.
Jean F.
JeanFrançois L.
Jean L.
JeanLouis C.
Jeanne L.
Jeannine M.
JeanPaul C.
JeanPierre L.
JeanRené M.
Jean Sébastien V.
cat test2.txt | LC_ALL='C' sort
Jean A.
Jean F.
Jean L.
Jean Sébastien V.
JeanFrançois L.
JeanLouis C.
JeanPaul C.
JeanPierre L.
JeanRené M.
Jeanne L.
Jeannine M.

Hors ligne

#5 Le 29/09/2022, à 08:48

claudius01

Re : [Résolu] Comportement de 'sort' avec le caractère '-'

Bonjour,

Ok, cela fonctionne avec le pipe
Merci à vous pour avoir résolu mon problème

Hors ligne

#6 Le 29/09/2022, à 10:34

MicP

Re : [Résolu] Comportement de 'sort' avec le caractère '-'

Bonjour

Utiliser la commande cat suivie d'un pipe vers la commande sort est un uuoc

D'autre part, seule la variable d'environnement LC_COLLATE est prise en compte par la commande sort

Donc, il suffit simplement de :

LC_COLLATE=C sort test2.txt

Retour utilisable de commande
2.d  Le prompt final : permet de s'assurer que la commande est allée à son terme, permet de s'assurer que le retour de commande a été copié/collé dans son intégralité et fournit dans certains cas d'autres informations très importantes.
voir le message #42

En ligne

#7 Le 29/09/2022, à 15:18

claudius01

Re : [Résolu] Comportement de 'sort' avec le caractère '-'

Bonjour,

Certes, mais j'ai réduit la présentation du problème conformément au principe du Short, Self Contained, Correct (Compilable), Example
La commande "LC_ALL='C' sort ..." étant dans le 1st script de:

$ ./convertPdf2Text.sh --sort RandoParticipants.pdf | ./colunm.sh 3 | tee RandoParticipants.txt

Dernière modification par claudius01 (Le 29/09/2022, à 15:42)

Hors ligne