IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Tri de chaines de caractères


Sujet :

Shell et commandes GNU

  1. #21
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 430
    Par défaut
    Hier soir, cygwin.
    Je viens de retester sur un "Solaris 10 5/09 s10s_u7wos_08 SPARC"
    Que je sois en "C" ou en "fr_FR.UTF-8", j'ai le même résultat de tri...

    Pour moi, ce n'est pas que le tri le problème, est-ce que le printf "%70s" t'affiche bien les mots sur 70 colonnes (car le tri ne fonctionne que si tous les mots font la même taille).

    PS: je croyais que ce n'était pas bien le "C.UTF-8" ?

  2. #22
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 308
    Par défaut
    Si je ne force pas la locale à "C", le tri ne marche pas.
    (Debian squeeze + xterm + bash + fr_FR.UTF-8)

    Pourtant, je n'utilise pas l'option -b de sort.

  3. #23
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 430
    Par défaut
    Bah, j'y peux pas grand chose, moi sur mes 2 env (cygwin et solaris, cela fonctionne), c'est peut-être un bug de votre version (???) de sort ou plus raisonnablement de votre libc.

    Est-ce que la version total gawk que j'ai donné fonctionne ?? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gawk '{a[$0]=sprintf("%70s",$0)}END{PROCINFO["sorted_in"]="@val_str_desc"; for(i in a) print i}' fichier
    et celle-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf "%s\n" $(awk '{printf("%70s\n",$0)}' fichier | sort -nr)
    Et sans l'option -n de sort (a priori, il n'a pas d'impact) ?

  4. #24
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 308
    Par défaut
    La version gawk ne marche pas et je ne comprends pas son tri au premier abord.
    L'autre version ne marche pas en essayant différentes options sauf -V.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    $ gawk '{a[$0]=sprintf("%70s",$0)}END{PROCINFO["sorted_in"]="@val_str_desc"; for(i in a) print i}' extrait_dico.txt 
    ABAISSAMES
    ABAISSAIT
    AA
    ABAISSASSIEZ
    ABAISSA
    ABAISSASSES
    ABAISSABLE
    ABACA
    ABAISSASSE
    ABACULES
    AALENIENNES
    ABAISSANT
    ABACULE
    ABACAS
    AAS
    AALENIENNE
    ABAISSAS
    ABAISSANTE
    ABAISSANTS
    ABAISSASSIONS
    ABAISSAIENT
    ABAISSAI
    ABAISSASSENT
    ABAISSANTES
    ABACOST
    AALENIENS
    AALENIEN
    ABAISSAIS
    ABAISSABLES
    ABACOSTS
    $ printf "%s\n" $(awk '{printf("%70s\n",$0)}' extrait_dico.txt | sort -V)
    ABAISSASSIONS
    ABAISSASSENT
    ABAISSASSIEZ
    AALENIENNES
    ABAISSABLES
    ABAISSAIENT
    ABAISSANTES
    ABAISSASSES
    AALENIENNE
    ABAISSABLE
    ABAISSAMES
    ABAISSANTE
    ABAISSANTS
    ABAISSASSE
    AALENIENS
    ABAISSAIS
    ABAISSAIT
    ABAISSANT
    AALENIEN
    ABACOSTS
    ABACULES
    ABAISSAI
    ABAISSAS
    ABACOST
    ABACULE
    ABAISSA
    ABACAS
    ABACA
    AAS
    AA

  5. #25
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 430
    Par défaut
    Interessant, je pense que le problème est du coté de la libc puisque cela ne fonctionne pas non plus via le gawk qui techniquement crée des lignes de tailles identique en rajoutant le nombre d'espace util en début de ligne puis après fait un tri.
    Si tu positionne ta locale en "C" sur l'execution du gawk, je pense que cela va fonctionner ???
    Je pense que vous avez une configuration ou un bug sur la locale qui fait que le tri ne prend pas en compte les espace dans une locale autre que la "C".

  6. #26
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Je pense que vous avez une configuration ou un bug sur la locale qui fait que le tri ne prend pas en compte les espace dans une locale autre que la "C".
    Vu qu'il s'agit du forum Gnu/Linux c'est le comportement "standard", où les locales autres que C/POSIX ignorent les espaces lors des tris.

  7. #27
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 430
    Par défaut
    Ok, voici donc une version avec sed qui remplace le printf:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed 's/^/1/;:d;/.\{75\}/!s/.*/0&/;td' fichier | sort -nr | sed 's/^0*1//'
    Est-ce que cela fonctionne comme ça ?

  8. #28
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Par défaut
    Oui:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    $ (export LC_ALL=fr_FR.UTF8; sed 's/^/1/;:d;/.\{75\}/!s/.*/0&/;td' fichier | sort -nr | sed 's/^0*1//')
    ABAISSASSIONS
    ABAISSASSIEZ
    ABAISSASSENT
    ABAISSASSES
    ABAISSANTES
    ABAîSSAIENT
    ABAISSAIENT
    ABAISSABLES
    AALENIENNES
    ABAISSASSE
    ABAISSANTS
    ABAISSANTE
    ABAISSAMES
    ABAISSABLE
    AALENIENNE
    ABAISSANT
    ...

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Programme de tri de chaine de caractères
    Par vetchang dans le forum Langage
    Réponses: 1
    Dernier message: 27/05/2008, 17h26
  2. Tri de chaine de caractère avec fgets
    Par clampin dans le forum Débuter
    Réponses: 4
    Dernier message: 16/05/2008, 22h42
  3. Comparaisons et tri des chaines de caractère.
    Par liliemmy dans le forum SQL
    Réponses: 2
    Dernier message: 01/04/2008, 17h52
  4. code de filtre et tri des chaines de caractères
    Par fatenatwork dans le forum Collection et Stream
    Réponses: 18
    Dernier message: 12/03/2008, 16h31
  5. Réponses: 17
    Dernier message: 16/12/2005, 09h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo