#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 le problème solutionné, 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
Hors 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