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 :

Insérer des données selon une certaine structure.


Sujet :

Shell et commandes GNU

  1. #1
    Candidat au Club
    Insérer des données selon une certaine structure.
    Bonjour,

    Je suis débutant en Shell, j'ai un fichier avec une structure :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    var1 : blabla
    var2 : blibli
    var3 : x=nombre; y=nombre; z=nombre



    Mon but est d'ajouter dans ce fichier des lignes respectant la même structure.

    Pour le moment j'utilise 3
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
     
    read var && echo "$var" >> mon_fichier

    à la suite et je fais en sorte de taper ma chaîne de caractère en respectant la structure de mon fichier.

    Mais j'ai le sentiment de "tricher" un peu et de pas avoir une solution plus optimisée. J'ai vu qu'il a une commande awk pour ce genre de problème mais je n'arrive pas a visualiser la structure à mettre en place car j'ai différents champs séparateurs (mon : et mon ; ).

    J'espère que mon problème est claire et merci de votre aide.

  2. #2
    Expert éminent sénior
    Bonjour

    D'abord, cette structure a-t-elle un nom ? Ou est-elle faite maison ?
    Si elle est "maison", pourquoi recréer un type de structure plutôt que de d'utiliser JSON, xml, csv, etc ?
    Pour ces formats cités, des outils tous faits existent.

    Sinon, awk est une bonne idée.

    Quel est le fichier d'entrée ? Quel est le fichier de sortie rêvé ?
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #3
    Candidat au Club
    J'ai un fichier .txt de la forme :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    var1 : toto
    var2 : tata
    var3 : x=21; y=23; z=14


    c'est moi qui l'ai crée ainsi donc elle est faite maison.

    Et en sorti je souhaite avoir :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var1 : toto
    var2 : tata
    var3 : x=21; y=23; z=14
     
    var1 : titi
    var2 : tutu
    var3 : x=23; y=57; z=89
    (c'est un exemple)


    Pour le moment, j'ajoute ces nouvelles données avec la commande que j'ai présenté dans mon premier message mais je cherche une façon plus optimisée de le faire.

  4. #4
    Modérateur

    « optimisée » selon quel critère ?

    voilà de l'optimisation
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    echo "var1 : titi
    var2 : tutu
    var3 : x=23; y=57; z=89" >>tonFichier.txt
    c'est optimisé : il n'y a qu'une commande !

    quelles sont les raisons qui t'ont conduit à adopter ce format ?
    Flodelarab t'as indiqué quelques formats de données.

    le format CSV est le plus facile à manipuler parce qu'il ne nécessite par d'outils externe au shell, et peut quand même s'adapter à ton cas : trois champs, qui peuvent être divisés en "sous-champs" ayant un séparateur de données différents du séparateur principal.
    ton fichier ne fera qu'une ligne
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    titi,tutu,23;57;89
    à toi de mettre en œuvre les commandes du shell pour maintenir ce fichier dans l'état que tu le souhaites : retenir/modifier les valeurs, et mettre à jour.
    Cette signature n'a pas pu être affichée car elle comporte des erreurs.

  5. #5
    Expert éminent sénior
    Il y a aussi le read à optimiser, donc le plus simple est :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    cat >>mon_fichier

    Là, suffit de saisir toutes les lignes selon la structure désirée et faire un Control-D pour sortir du fichier...
    Cordialement.

  6. #6
    Expert éminent sénior
    Kitdev, ne confonds pas le stockage des données et l'affichage des données. Le fond et la forme.

    Tu pourrais stocker utilement (car facilement utilisables) tes données comme ceci:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    $ cat structureMaison.txt
    toto;tata;21;23;14
    titi;tutu;23;57;89


    Et si tu trouves cela illisible, faire une commande, un alias, ou un script, pour l'afficher "joliment" :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $ awk -F';' '(FNR>1){print "";} {print "var1 :",$1; print "var2 :",$2; print "var3 : x="$3"; y="$4"; z="$5;}' structureMaison.txt
    var1 : toto
    var2 : tata
    var3 : x=21; y=23; z=14
     
    var1 : titi
    var2 : tutu
    var3 : x=23; y=57; z=89


    Ainsi, ajouter un objet dans ta structure en ajoutant une ligne:
    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
    $ echo "tete;tyty;1;2;3" >> structureMaison.txt
    $ cat structureMaison.txt
    toto;tata;21;23;14
    titi;tutu;23;57;89
    tete;tyty;1;2;3
    $ awk -F';' '(FNR>1){print "";} {print "var1 :",$1; print "var2 :",$2; print "var3 : x="$3"; y="$4"; z="$5;}' structureMaison.txt
    var1 : toto
    var2 : tata
    var3 : x=21; y=23; z=14
     
    var1 : titi
    var2 : tutu
    var3 : x=23; y=57; z=89
     
    var1 : tete
    var2 : tyty
    var3 : x=1; y=2; z=3
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  7. #7
    Candidat au Club
    Merci pour votre aide, j'ai eu un peu mal à la tête en voyant ce awk mais je pense avoir compris. Je vais faire mes tests

###raw>template_hook.ano_emploi###