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 :

Transformer un fichier .txt


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2011
    Messages
    422
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2011
    Messages : 422
    Par défaut Transformer un fichier .txt
    Bonjour,

    je suis novice en Shell, et après avoir fait un extraction j'ai obtenu un fichier de la forme suivante

    groupe1
    aaaa
    cccc
    dddd
    --
    groupe2
    rrrrrr
    gggg
    bbbb
    --
    j'aimerai bien extraire les groupes et les mettre à coté des membre
    un peu comme ça

    groupe1;aaaa
    groupe1;cccc
    groupe1;dddd
    --
    
    groupe2;rrrrrr
    groupe2;gggg
    groupe2;bbbb
    --
    j'arrive à coller qu'un groupe en combinant une variable et un sed, soit dit en passant le groupe se colle partout, je n'ai pas mis de condition me permettant de passer au groupe suivant et je ne vois pas comment faire d'ailleurs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for s in `egrep -v 'uid|cn|--' xxxx.csv` ;do 
    sed -e 's/\(uid=.*\)/\1\;'"$s"'/' xxxxx.csv >resultat.txt
    done;
    pouvez vous m'aider ?
    merci d'avance.

  2. #2
    Invité
    Invité(e)
    Par défaut
    As-tu à chaque fois 3 membres comme dans ton exemple (ça m'étonnerais)?
    Les groupes sont-ils bien séparé par un "--" à chaque fois ?

  3. #3
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2011
    Messages
    422
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2011
    Messages : 422
    Par défaut
    salut

    en effet, suivant le groupe, le nombre de membres est différents

    pour la deuxième question, oui le fichier se termine bien par --, j'ai fait l'extraction de manière a bien dissocier les groupes

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 851
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 851
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par huître Voir le message
    pour la deuxième question, oui le fichier se termine bien par --, j'ai fait l'extraction de manière a bien dissocier les groupes
    Salut
    Dans ce cas, pas de souci. te suffit de lire le fichier ligne par ligne et si tu es sur "--" tu supprimes un flag que tu remplis à la ligne suivante et que tu utilises pour les autres lignes...

    Code bash : 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
    #!/bin/sh
    cat fichier | while read ligne
    do
        # Si on est  sur la ligne repère
        if test "$ligne" = "--"
        then
            # On écrit la ligne et une ligne vide (comme dans l'exemple)
            echo "$ligne"
            echo
     
            # On supprime le flag et on passe à la ligne suivante
            unset groupe
            continue
        fi
     
        # Si on est sur une ligne et que le flag n'existe pas
        if test -z "$groupe"
        then
            # On se trouve fatalement sur une ligne "groupe"
            groupe="$ligne"
            continue
        fi
     
        # On est sur une ligne standard - On la réécrit en rajoutant le groupe
        echo "$groupe:$ligne"
    done

    Citation Envoyé par huître Voir le message
    et je ne vois pas comment faire d'ailleurs
    Arrivé à un certain niveau de difficulté, faut arrêter de croire que les outils de base sont assez "magiques" pour tout faire et faut plonger un peu les mains dans la prog (quoique j'ai vu parfois des trucs extraordinaires faits avec une simple regex...)
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre expérimenté
    Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2007
    Messages : 248
    Par défaut
    Ma solution:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '/--/ {print ""} $1 != "--" {printf("%s ",  $1)}' fichier3.txt  | awk '{for (i = 2; i <= NF; i++) { print $1 ";" $i}; print "--"}'
    Edit: j'avais pas vu. S'il y a des espaces, utiliser un caractère | ou # comme séparateur de champs

  6. #6
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2011
    Messages
    422
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2011
    Messages : 422
    Par défaut
    merci les deux solutions marche à merveille vous êtes des genies

Discussions similaires

  1. Réponses: 2
    Dernier message: 30/11/2012, 11h39
  2. Transformer un fichier txt en xml
    Par hitchie dans le forum Général Python
    Réponses: 4
    Dernier message: 06/05/2009, 11h05
  3. Transformer un fichier .txt en .wav
    Par stage84 dans le forum LabVIEW
    Réponses: 1
    Dernier message: 16/07/2008, 12h23
  4. Réponses: 5
    Dernier message: 19/06/2008, 23h03
  5. [Tableaux] transformation d'un fichier txt en xml
    Par edophie dans le forum Langage
    Réponses: 1
    Dernier message: 26/09/2006, 12h55

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