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

Applications et environnements graphiques Discussion :

[Shell] Regrouper les lignes par groupe de trois


Sujet :

Applications et environnements graphiques

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 3
    Points : 1
    Points
    1
    Par défaut [Shell] Regrouper les lignes par groupe de trois
    Bonjour à tous.

    Voila mon problème, étant nouveau dans la programmation en shell, je ne m'en sort pas. J'ai déja fait quelques scripts (qui marchent bien entendu) mais j'arrive à bout

    Je part d'un fichier de la forme :

    oisdfjk
    ouvbzehf
    0001
    odfsfdg
    odfgisd
    0001
    Et j'aimerai qu'il devienne du style :

    oisdfjk,ouvbzehf,0001
    odfsfdg,odfgisd,0001
    J'ai essayé plusieurs solutions comme
    - tr qui remplace les \n par des ,
    - un for avec un awk afin de modifier, suivant le no de champs, la chose qui les séparent.

    Merci d'avance.

    Bazouil

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 114
    Points : 130
    Points
    130
    Par défaut
    Il te suffit d'utiliser la commande sed de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed 's/\[a`\-zA\-Z]*\n$/,/'
    Enfin, c'est l'idée car je ne suis ni un pro des expressions régulières ni de sed.

    Un pro pour confirmer la syntaxe svp ?!

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci pour ta réponse mais ça ne marche pas.
    Je vais donc approfondir la commande SED car il semble que ça soit la meilleur solution pour palier à mon problème.
    Je vous tiens au courant.

    Bazouil

  4. #4
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 262
    Points
    12 262
    Par défaut
    la syntaxe sed est peut etre erronné mais le principe est de
    faire un remplacement de chaque caractere alphabetique+fin de ligne par luimême+",".

    peut etre sans les \ selon les shells

    ayé j'ai retrouver comment faire un join....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -e :a -e '/[a-zA-Z]$/N; s/\n/, /; ta' FICHIER
    ou /CHAINEàCHERCHER$/N; est ce qu'on cherche
    autrement n'importe quel caractere a à Z en n'importequel nombre suivit de fin de ligne (pas de ponctuation ou de chiffres comme ça tes lignes chiffrées sont automatiquement mise en fin de ligne.
    à remplacer par un \n/, comme séparateur

    un exemple valant mieux qu'un long discours.....
    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
    strx : /tmp>cat > FP
    oisdfjk
    ouvbzehf
    [..]
    ouvbzehf
    0001
    ^D
    strx : /tmp>sed -e :a -e '/[a-zA-Z]$/N; s/\n/, /; ta' FP
    oisdfjk, ouvbzehf, 0001
    odfsfdg, odfgisd, 0001
    oisdfjk, ouvbzehf, 0001
    odfsfdg, odfgisd, 0001
    oisdfjk, ouvbzehf, 0001
    odfsfdg, odfgisd, 0001
    strx : /tmp>rm FP
    strx : /tmp>

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bonjour et merci frp31

    J'ai essayé ta solution mais dans mon cas, j'ai oublié de préciser que les noms avec des lettres pouvaient également comprendre des chiffres.
    Quelqu'un m'a donné la solution miracle.
    Surtout, ne me demandez pas comment fonctionne cette fonction, je ne comprend pas tout

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    nb=0
     
    while read ligne
    do
        nb=$nb+1
        new="${new#,},$ligne"
        if [ $((nb%3)) -eq 0 ]
        then
            nb=0
            echo "${new#,}"
            new=""
        fi
    done < fichier
    J'éspere que ce code pourra servir à quelqu'un.

    A bientôt.
    Bazouil

  6. #6
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 262
    Points
    12 262
    Par défaut
    pour chaque ligne ca la lit,
    ca substitue elle meme par elle meme, la suivante tant que le compteur n'est pas a 3
    sinon ca reinitialise la variable new et la variable nombre....

    autrement dit ca joue sur le nombre de ligne et en utilisant que le shell...

    pas mal comme methode... un code esthetique... et sympa.... je me le mets dans mes archives d'astuces....

Discussions similaires

  1. Afficher les lignes par groupe en excel avec vb.net
    Par malakrouhhi dans le forum VB.NET
    Réponses: 4
    Dernier message: 12/01/2010, 18h47
  2. numéroter les lignes par groupe
    Par Kurdran dans le forum Langage SQL
    Réponses: 10
    Dernier message: 04/04/2008, 14h08
  3. Regrouper les données par rapport à la date
    Par goldeagle dans le forum Access
    Réponses: 7
    Dernier message: 11/12/2006, 15h35
  4. Trier les fichiers par type et les afficher par groupe ...
    Par KneXtasY dans le forum Autres Logiciels
    Réponses: 4
    Dernier message: 18/09/2005, 18h50
  5. Réponses: 4
    Dernier message: 05/09/2005, 11h13

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