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 :

Classer les mots d'un fichier par ordre alphabétique


Sujet :

Shell et commandes GNU

  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2015
    Messages : 54
    Par défaut Classer les mots d'un fichier par ordre alphabétique
    Bonjour,

    Je recherche une solution pour classer un mot comme "bonjour" par ordre alphabétique pour avoir "bjnooru". Il y a bien la commande sort, mais elle ne s'applique qu'aux lignes, mais pas aux mots contenus dans cette ligne.
    Merci.

  2. #2
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    salut,

    il n'y a pas de commande toute faite, il va falloir écrire une petite fonction, un petit algorithme

    une façon de procéder peut être, pour chaque mot, de découper le mot en lettres, 1 lettre par ligne, puis de trier avec sort et enfin ré-assembler les lignes pour reformer un mot

    ça c'est pour le tri des mots, restera à gérer une phrase complète composée de mots

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 304
    Par défaut
    Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ sed 's/./&\n/g'<<<"bonjour"|sort|sed ':z;N;$!b z;s/\n//g'               
    bjnooru

  4. #4
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (...) | sed ':z;N;$!b z;s/\n//g'
    yep, j'avais envisagé un truc genre (...) | xargs | sed -e 's/ //g' plus simplement, si tu peux décortiquer ton sed à l'occasion je suis preneur ^^

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 304
    Par défaut
    : indicateur d'étiquette pour faire des branchements (inconditionnels ou conditionnels)
    :z étiquette z
    N Nouvelle ligne ajoutée au buffer avec un \n pour signifier le retour à la ligne.
    b Saut inconditionnel
    b z saut inconditionnel à l'étiquette z
    1b z à la ligne 1, saut inconditionnel à l'étiquette z
    $b z à la dernière ligne, saut inconditionnel à l'étiquette z
    $!b z si c'est pas la dernière ligne, saut inconditionnel à l'étiquette z (Tout le fichier est dans le buffer)
    s/\n//g suppression totale des \n du fichier.

    Sinon, voici un exemple de saut conditionnel et son contraire (pour un cryptage facile et pas cher; le premier cryptogramme commence toujours par a, le second jamais):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ sed ':bozo;y/abcdefghijklmnopqrstuvwxyz / abcdefghijklmnopqrstuvwxyz/;s/^a/&/;T bozo'<<<"bonjour tout le monde"                                                                    
    anmintqzsntszkdzlnmcd
    $ sed ':bozo;y/abcdefghijklmnopqrstuvwxyz / abcdefghijklmnopqrstuvwxyz/;s/^a/&/;t bozo'<<<"bonjour tout le monde"                                                                    
     mlhmspyrmsryjcykmlbc

  6. #6
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 424
    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 424
    Par défaut
    Bonjour,
    D'autres solutions comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "bonjour" | fold -w 1 | sort | tr -d "\n"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "bonjour" | fold -w 1 | columns -s | tr -d " "
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "bonjour" | grep -o '.' | columns -s | tr -d " "
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "bonjour" | sed 's/./&\n/g' | columns -s | sed 's/ //g'
    Et ma préférée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "bonjour" | sed 's/./&\n/g' | columns -s | column -t -s " " -o ""

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 304
    Par défaut
    Une version pure sed et une version combo grep|awk:

    trialphabetique.sed :
    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
    #!/bin/sed -f
     
    :a; s/\([bcdefghijklmnopqrstuvwxyz ]\+\)a/a\1/g; t a
    :b; s/\([cdefghijklmnopqrstuvwxyz ]\+\)b/b\1/g; t b
    :c; s/\([defghijklmnopqrstuvwxyz ]\+\)c/c\1/g; t c
    :d; s/\([efghijklmnopqrstuvwxyz ]\+\)d/d\1/g; t d
    :e; s/\([fghijklmnopqrstuvwxyz ]\+\)e/e\1/g; t e
    :f; s/\([ghijklmnopqrstuvwxyz ]\+\)f/f\1/g; t f
    :g; s/\([hijklmnopqrstuvwxyz ]\+\)g/g\1/g; t g
    :h; s/\([ijklmnopqrstuvwxyz ]\+\)h/h\1/g; t h
    :i; s/\([jklmnopqrstuvwxyz ]\+\)i/i\1/g; t i
    :j; s/\([klmnopqrstuvwxyz ]\+\)j/j\1/g; t j
    :k; s/\([lmnopqrstuvwxyz ]\+\)k/k\1/g; t k
    :l; s/\([mnopqrstuvwxyz ]\+\)l/l\1/g; t l
    :m; s/\([nopqrstuvwxyz ]\+\)m/m\1/g; t m
    :n; s/\([opqrstuvwxyz ]\+\)n/n\1/g; t n
    :o; s/\([pqrstuvwxyz ]\+\)o/o\1/g; t o 
    :p; s/\([qrstuvwxyz ]\+\)p/p\1/g; t p
    :q; s/\([rstuvwxyz ]\+\)q/q\1/g; t q
    :r; s/\([stuvwxyz ]\+\)r/r\1/g; t r
    :s; s/\([tuvwxyz ]\+\)s/s\1/g; t s
    :t; s/\([uvwxyz ]\+\)t/t\1/g; t t
    :u; s/\([vwxyz ]\+\)u/u\1/g; t u
    :v; s/\([wxyz ]\+\)v/v\1/g; t v
    :w; s/\([xyz ]\+\)w/w\1/g; t w
    :x; s/\([yz ]\+\)x/x\1/g; t x
    :y; s/\([z ]\+\)y/y\1/g; t y
    :z; s/\( \+\)z/z\1/g; t z
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ ./trialphabetique.sed <<< "bonjour tout le monde"
    bdeejlmnnoooorttuu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ echo "bonjour tout le monde"|grep -o '.'|awk '{tab[$1]++;} END{n=asorti(tab,tritab);for (i=1;i<=n;i++) for (j=1;j<=tab[tritab[i]];j++) printf tritab[i]; print "";}'
    bdeejlmnnoooorttuu

  8. #8
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2015
    Messages : 54
    Par défaut
    Bonjour;
    Merci pour vos réponses, ça fait penser que je dois sérieusement mes sortirs les doigts du ... et me coller les fesse devant l’écran pour me remettre au regex. Les commandes fonctionnent. Le seul inconvénient c'est moi pensait un quelque chose de plus standard qui pourrait aussi fonctionner sur un fichier avec plusieurs lignes sur des jeux de caractères différents accentués ou pas et/ou spéciaux. Ou sinon si vous avez un algorithme pour faire des utilisateurs intelligent sur le PC c'est mieux .

Discussions similaires

  1. Classer les fichiers par ordre
    Par fabricen26 dans le forum Linux
    Réponses: 2
    Dernier message: 09/05/2014, 09h53
  2. Ordonner les élements d'un select par ordre alphabétique
    Par islyoung2 dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 11/03/2010, 12h07
  3. Réponses: 2
    Dernier message: 29/10/2008, 12h13
  4. Ouvrir des fichiers par ordre alphabétique
    Par gegadin dans le forum Général VBA
    Réponses: 2
    Dernier message: 17/09/2008, 18h25
  5. [débutant] Tri de fichiers par ordre alphabétique
    Par NicaeaCivitas dans le forum Langage
    Réponses: 5
    Dernier message: 30/11/2006, 16h25

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