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 POSIX Discussion :

Récupération de données boucle (Script Bash)


Sujet :

Shell et commandes POSIX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2015
    Messages : 7
    Par défaut Récupération de données boucle (Script Bash)
    Bonjour à tous !! je découvre depuis peu de temps l'univers magique des scripts bash, j'ai regardé quelques cours mais malheureusement, je n'ai pas réussi à trouver les informations pour me sortir de mon petit problème actuel.

    Voici le petit script que j'ai écrit pour le moment :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #!/bin/bash
     
    for p in `seq 0.01 0.01 1`;
    do
     x=`./rw_light -e $p -M 100000 -N 200 >test.txt`
     y=`grep q= t.txt`
     echo $y
    done
    .
    J'execute le programme rw_light qui me sort plusieurs valeurs dans un fichier test.txt. Il me sort entre autre une valeur "q=0.6579557" par exemple, je récupère la valeur à l'aide de la commande grep q=

    Le tout est dans une boucle qui exécute mon programme pour toute une série de valeur de p et à chaque exécution j'affiche la valeur de q= à l'aide de la commande echo.

    Ça fonctionne assez bien, et en exécutant j'obtient par exemple :

    q=1.000000e+00
    q=9.999700e-01
    q=9.999800e-01
    q=9.999300e-01
    q=9.999000e-01
    q=9.998600e-01
    q=9.998700e-01
    q=9.998200e-01
    q=9.997600e-01
    q=9.996200e-01
    q=9.997100e-01
    q=9.995100e-01
    q=9.994800e-01
    q=9.994000e-01
    q=9.993200e-01
    q=9.991800e-01
    q=9.991100e-01
    Toute une série de valeur pour mes différents p (variant de 0,01 à 1 avec un pas de 0,01 dans le script). En fait j'aimerais récupérer ces résultats, les mettre dans un fichier .txt et remplacer les q= par rien de manière à pouvoir automatiser un petit plus pour ensuite tracer les données avec gnuplot par exemple.

    Je ne sais pas si j'ai été très clair ..
    En tout cas, merci beaucoup d'avance pour vos réponses !!

  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,

    tu peux par exemple modifier la ligne 7 pour echo $y | cut -c3-, c'est un début

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2015
    Messages : 7
    Par défaut
    Merci beaucoup !! Je viens d'essayer, c'est un bon début en effet

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 659
    Par défaut
    Bonjour,

    bash dispose de remplacements de paramètres qui peuvent faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ var='q=0.123456789e-1'
    $ echo ${var#*=}
    0.123456789e-1
    sur un système GNU (disposant donc d'options non portables), grep possède un option --perl-regexp, qui permettrait de piper ta commande et d'afficher seulement ce que tu veux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    taCommande |  | grep -oP '[^=]*=\K.*'
    il faut nous dire sur quels systèmes tu comptes exécuter ce script.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2015
    Messages : 7
    Par défaut
    D'accord je vois !! Pour le système, je suis sur Mac (OS X Yosemite)

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Citation Envoyé par minka Voir le message
    D'accord je vois !! Pour le système, je suis sur Mac (OS X Yosemite)
    donc pas d'option -P :-( (mais, par défaut, le shell du Terminal est un bash)

    Donc tu peux faire (en reprenant la suggestion de N_BaH):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #!/bin/bash
     
    for p in $(seq 0.01 0.01 1);
    do
     y=$(./rw_light -e $p -M 100000 -N 200 | fgrep 'q=')
     echo "${p};${y#*=}"
    done
    Je te conseille d'utiliser $(...) plutôt que `` qui gère moins bien les imbrications.
    Je te conseille aussi d'utiliser un pipe "|" plutôt qu'un fichier intermédiaire (surtout si tu n'utilises pas le même nom entre l'écriture et la lecture!).

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2015
    Messages : 7
    Par défaut
    D'accord merci beaucoup jack-ft, je vais suivre tes conseils !! Après en ce qui concerne la récupération, il serait possible de récupérer l'ensemble des données générées automatiquement dans un fichier .txt? Car pour le moment je le fait à la "main" et que lorsque j'ai beaucoup de données à gérer, c'est pas forcément pratique :s

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

Discussions similaires

  1. [Batch] Récupération de données + boucle
    Par crokette dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 16/06/2010, 09h24
  2. Réponses: 1
    Dernier message: 16/08/2007, 18h04
  3. envoi de données ressources a un server oracle (scripting bash)
    Par avogadro dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 25/12/2006, 01h25
  4. [D6 => XML] Récupération de données avec une boucle.
    Par Bason_sensei dans le forum Delphi
    Réponses: 1
    Dernier message: 23/05/2006, 13h50
  5. probleme récupération donnée dans script xsl
    Par jmacdev dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 12/05/2006, 17h37

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