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 :

Transformation lignes colonnes


Sujet :

Shell et commandes GNU

  1. #1
    Membre du Club
    Homme Profil pro
    Architecte technique
    Inscrit en
    Octobre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 7
    Par défaut Transformation lignes colonnes
    Bonjour à tous,

    J'essaie de transformer le format suivant en tableau (csv) sans parvenir à trouver la bonne combinaison ; awk, sed,... tout y est passé mais en vain.

    Exemple :

    table{
    Nom=TOTO
    Prenom=TITI
    Age=23
    Niveau=A
    Etage=2
    Tel=111111111
    }
    
    table{
    Nom=KOKO
    Prenom=KIKI
    Age=27
    Niveau=B
    Etage=5
    }
    etc..

    A transformer en :

    Nom;Prénom;Age;Niveau;Etage;tél
    TOTO;TITI;23;A;2;111111111
    KOKO;KIKI;27;B;5;;
    .....etc.
    Je précise qu'il n'y a pas forcément le même nombre de champs (comme par exemple, le tél qui n'apparait pas dans la seconde table.

    Merci à tous pour votre aide.

    Cordialement

  2. #2
    Membre du Club
    Homme Profil pro
    Architecte technique
    Inscrit en
    Octobre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 7
    Par défaut Transformation lignes colonnes
    Ok, j'ai pu régler mon soucis.

  3. #3
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 668
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 668
    Par défaut
    c'est beau l'esprit de partage...
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 302
    Par défaut et la solution
    Tant mieux pour toi. C'est quoi ce format ? c'est normalisé ?

    J'ai essayé hier soir, mais n'ai pas répondu car résultat non opérationnel.
    Je suis parti vers une transformation XML.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  5. #5
    Membre du Club
    Homme Profil pro
    Architecte technique
    Inscrit en
    Octobre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 7
    Par défaut Transformation lignes colonnes
    Ne me jugez pas trop vite; il était tard et je ne voulais pas occuper quelqu'un inutilement alors que j'avais pu résoudre mon problème.

    J'ai, d'abord, enlevé le superflu ; un coup de "grep -v" pour enlever les lignes avec accolades et un coup de awk pour n'afficher que les valeurs des champs.

    Ce qui donne (des blocs séparés par des lignes vides) :

    TOTO
    TITI
    23
    A
    2
    111111111
    
    KOKO
    KIKI
    27
    B
    5
    
    etc...
    puis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat fichier|tr "\n" ";" | sed 's/;;/\n/g'
    pour sortir le tableau.

    Il y a certainement mieux à faire avec une commande unique mais je manque de temps pour la chercher.


    On peut retrouver ce genre de format sous nagios, par exemple.

    A+

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Salut,

    Un poil trop tard mais bon...

    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
    $ cat plop 
    table{
    Nom=TOTO
    Prenom=TITI
    Age=23
    Niveau=A
    Etage=2
    Tel=111111111
    }
     
    table{
    Nom=KOKO
    Prenom=KIKI
    Age=27
    Niveau=B
    Etage=5
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ sed -n '/table{/{n;:z;N;/}$/!bz;s/\n}//;s/.*=//Mg;s/\n/;/gp}' plop 
    TOTO;TITI;23;A;2;111111111
    KOKO;KIKI;27;B;5

  7. #7
    Membre du Club
    Homme Profil pro
    Architecte technique
    Inscrit en
    Octobre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 7
    Par défaut Transformation lignes colonnes
    Aucunement, je la garde sous le coude et c'est bien plus pro
    Merci.

  8. #8
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 369
    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 369
    Par défaut
    Citation Envoyé par abcd2013 Voir le message
    Ne me jugez pas trop vite; il était tard et je ne voulais pas occuper quelqu'un inutilement alors que j'avais pu résoudre mon problème.

    J'ai, d'abord, enlevé le superflu ; un coup de "grep -v" pour enlever les lignes avec accolades et un coup de awk pour n'afficher que les valeurs des champs.

    Ce qui donne (des blocs séparés par des lignes vides) :

    TOTO
    TITI
    23
    A
    2
    111111111

    KOKO
    KIKI
    27
    B
    5

    etc...

    puis : cat fichier|tr "\n" ";" | sed 's/;;/\n/g'

    pour sortir le tableau.

    Il y a certainement mieux à faire avec une commande unique mais je manque de temps pour la chercher.


    On peut retrouver ce genre de format sous nagios, par exemple.

    A+
    Bonjour,
    Et les champs manquants, tu les gères comment car selon ton message initial, la difficulté était plus là ?

  9. #9
    Membre du Club
    Homme Profil pro
    Architecte technique
    Inscrit en
    Octobre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 7
    Par défaut Transformation lignes colonnes
    Pour les champs manquants, j'ai dû y aller à la mano. Les premiers champs ne sont jamais absents ce qui permet de délimiter les lignes du tableau. On voit tout de suite les colonnes décalées mais en effet, si elles sont trop nombreuses cela devient vite pénible...

    L'idée serait, peut-être, de compléter les champs absents.
    Exemple, en rajoutant "Tél=" au second bloc et en procédant de même avec les champs manquants sur l'ensemble des blocs... mais bien sûr le soucis c'est toujours "comment".

    Encore merci à zipe31 pour cette magnifique ligne de code.

    Cdt

  10. #10
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 369
    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 369
    Par défaut
    Un petit truc comme ça ?
    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
    $$ cat tb.tb
    table{
    Nom=TOTO
    Prenom=TITI
    Age=23
    Niveau=A
    Etage=2
    Tel=111111111
    }
     
    table{
    Nom=KOKO
    Prenom=KIKI
    Age=27
    Niveau=B
    Etage=5
    Adresse=Paris
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ awk 'BEGIN{SUBSEP="="} /{/,/}/ { if (/}/) { a+=1;split(A,T,"=");for (i=2;i<length(T);i+=2) {Y[T[i]]=1;X[T[i],a]=T[i+1]};A="";next} ; if (/{/) next ;A=A"="$0} END{for (i in Y) printf i";" ; printf "\n" ;for (b=1;b<=a;b++){ for (i in Y) {printf X[i"="b]";"} printf "\n"}}' tb.tb
    Prenom;Niveau;Tel;Etage;Age;Adresse;Nom;
    TITI;A;111111111;2;23;;TOTO;
    KIKI;B;;5;27;Paris;KOKO;
    Ici, on ne connait pas à l'avance le nombre de champs par table...
    D'ailleurs, j'ai rajouter un champs adresse dans le 2eme table pour l'exemple.

  11. #11
    Membre du Club
    Homme Profil pro
    Architecte technique
    Inscrit en
    Octobre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 7
    Par défaut Transformation lignes colonnes
    C'est tout bonnement parfait ! Bravo.
    Merci disedorgue.

    Cdt

  12. #12
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 302
    Par défaut champs manquant
    C'est par rapport aux champs manquants que j'avais pensé à XML.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  13. #13
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 369
    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 369
    Par défaut
    Citation Envoyé par abcd2013 Voir le message
    C'est tout bonnement parfait ! Bravo.
    Merci disedorgue.

    Cdt
    Parfait, c'est un bien grand mot, le script awk doit être largement améliorable car j'en n'ai pas fais depuis au moins 2 lustres.
    Par contre, juste pour l'exercice, cela pourrait être interressant de le refaire rien qu'en builtin shell...

  14. #14
    Membre du Club
    Homme Profil pro
    Architecte technique
    Inscrit en
    Octobre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 7
    Par défaut Transformation lignes colonnes
    Disedorgue, je voulais dire que ton script répond parfaitement à mon besoin Encore merci.

    Merci chrtophe d'avoir pris le temps, également.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Transformer des colonnes en lignes
    Par marman dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 23/11/2006, 17h43
  2. Transformer ligne en colonne
    Par delphine_lep dans le forum Langage SQL
    Réponses: 2
    Dernier message: 03/10/2006, 14h15
  3. transformation lignes en colonne
    Par marti dans le forum Langage SQL
    Réponses: 5
    Dernier message: 16/06/2006, 17h13
  4. Requête : Transformer lignes en colonnes
    Par bleu_ciel dans le forum Access
    Réponses: 6
    Dernier message: 27/05/2006, 21h26
  5. transformer des colonnes en lignes
    Par flonardi dans le forum Oracle
    Réponses: 13
    Dernier message: 28/10/2004, 12h43

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