Script Shell pour tracé avec Gnuplot

Résolu
nonoEW Messages postés 28 Statut Membre -  
 jingmei -
Bonjour,

J'ai des fichiers de données type dataYY_MM_DD.log à 4 colonnes à partir desquels je dois tracer des courbes.
Pour le moment j'utilise Gnuplot où je tape les commandes directement mais j'aimerais automatiser la chose avec un fichier .sh qui me permettrait de :

1- Créer un fichier postscript sur le disque type dataYY_MM_DD.ps pour l'affichage des courbes,
2- Lance Gnuplot,
3- Sélectionne le terminal ("set terminal postscript"),
3- Sélectionne le fichier crée sur le disque (set output "dataYY_MM_DD.ps"),
4- Sélectionne format abscisse et ordonnée... (set format y "$%g$" / set format x "$%.2f$"),
5- Sélectionne le titre du graphe set title (set title "Plateau Curve"),
6- Sélectionne le libellé abscisse/ordonnée (set xlabel "HV" / set ylabel "Flux"),
7- Enfin trace le fichier voulu (plot "data.log" using 2:3 with lines).

Etant novice en shell, est ce que quelqu'un pourrait me guider ?
Merci
Nono
Configuration: Windows XP
Firefox 2.0.0.16

11 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Surement...

    En reprenant l'exemple ci-dessus :
    #! /bin/sh
    
    DATE=$(date '+%d-%m-%Y')
    
    gnuplot <<EOF
    set logscale y
    set xlabel 'Valeur de x'
    set ylabel 'Grandeur à calculer'
    set yrange [1:10000]
    set grid
    set nokey
    set label "Reference" at 20,1000
    set label "Mesures" at 20,100
    plot x**2, x**2+12*x*sin(sqrt(x))
    
    pause -1
    
    set term postscript portrait
    set output "${DATE}.ps"
    set size 0.7, 0.7
    replot
    EOF
    devrait le faire.
    2
  2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    Normalement en mettant toutes ces commandes dans un simple fichier texte que tu appelleras comme suit :
    gnuplot fichier.txt


    ;-))
    1
  3. nonoEW
     
    Merci JP pour cette réponse mais il m'est imposé de mettre cela dans un script shell. De plus la création du fichier .ps n'est assurée en faisant comme cela.

    Nono
    1
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Si si c'est faisable.

      Regarde sur cette page : http://www-rst.int-evry.fr/~hebutern/IT21/Simu/Gnuplot.html

      En prenant toutes les commandes données dans la partie intitulée "Exemple" et en les mettant dans un fichier, tu crées ensuite un script sh depuis lequel tu appelleras ton fichier de commande via la commande "gnuplot".
      #! /bin/sh
      
      gnuplot fichier.commande
      Ton fichier .ps sera créé et le graphe s'affichera...
      0
  4. nonoEW Messages postés 28 Statut Membre 3
     
    Merci, j'ai essayé, cela marche très bien mais au risque d'être chiant ,)
    J'aimerais tout de même savoir si il est possible de faire cela avec un seul et même fichier shell qui me créer un fichier .ps à chaque fois que je l'éxécute avec date+heure comme nom de fichier .ps.
    Nono
    1
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. nonoEW Messages postés 28 Statut Membre 3
     
    ok, merci, c'est nickel tout ça !!!
    j'ai une dernière question...
    Voilà le code pour mon tracé :

    #! /bin/sh

    DATE=$(date '+%d-%m-%Y-%H:%M:%S')

    gnuplot <<EOF
    set term postscript landscape
    set output 'SPND_SU_PS_${DATE}.ps'

    set xlabel 'Time'
    set ylabel 'Flux'
    set grid
    set nokey
    set title 'Response'
    plot "data.log" using 1:2 with lines
    EOF

    Est-il possible de faire en sorte d'utiliser systématiquement le dernier fichier de points (.log) enregistré sur le disque pour le tracé ?? Et éventuellement mettre un message si aucun fichier .log n'est présent sur le disque ?

    Nono
    1
  7. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Re-

    Oui c'est possible.

    Mais faut-il encore savoir comment différencier le dernier fichier de log ? Date ? Nom ?
    1
  8. nonoEW Messages postés 28 Statut Membre 3
     
    Le fichier de log devrait toujours être différencié par la date et son nom devrait avoir la forme suivante :
    data_${DATE}.log

    Nono
    1
  9. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    T'as pas un exemple de listing du répertoire contenant les fichiers (ls -l), histoire de voir sur quoi se baser pour la récup du dernier enregistrement...
    1
    1. nonoEW Messages postés 28 Statut Membre 3
       
      Après réflexion... Comme la nuit porte conseil, je pense que le fait de prendre le dernier fichier enregistré n'est pas super maintenable comme solution.
      Il faudrait mieux faire en sorte qu'à l'execution du script sh, une fenetre type konqueror s'ouvre et qu'on puisse sélectionner directement le fichier de point pour le tracé.
      Est ce plus simple comme solution ?

      Nono
      0
    2. nonoEW Messages postés 28 Statut Membre 3
       
      J'ai essayé de sélectionner le fichier à partir de la commande Dialog, c'est pas mal mais le truc c'est que ça marche pas tip top la selection du fichier me donne tout le chemin alors que je n'ai besoin que du nom simple.
      Voici mon essai:
      #! /bin/sh

      DATE=$(date '+%d-%m-%Y-%H:%M:%S')
      #PROGRAM="/opt/kde3/bin/konqueror"

      DIALOG=${DIALOG=dialog}
      FILE=`$DIALOG --stdout --title "Choisissez un fichier" --fselect $HOME/ 14 48`

      case $? in
      0)
      echo "\"$FILE\" selected";;
      1)
      echo "Appuyé sur Annuler.";;
      255)
      echo "Fenêtre fermée.";;
      esac

      if [ ! -e "{$FILE}" ]
      then
      gnuplot <<EOF
      set term postscript landscape
      set output 'SPND_SU_PS_${DATE}.ps'

      set xlabel 'Time'
      set ylabel 'Flux'
      set grid
      set nokey
      set title 'SPND Response'
      plot "{$FILE}" using 1:2 with lines
      EOF

      fi

      Nono
      0
    3. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > nonoEW Messages postés 28 Statut Membre
       
      plot "${FILE##*/}"
      ;-))
      0
    4. nonoEW Messages postés 28 Statut Membre 3 > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
       
      Merci jipicy pour ta réponse ça marche bien.
      Par contre, avec ma "novicitude" peux tu me dire

      1. Pourquoi j'ai une erreur du type unexpected end of Line en ligne 33 dans le code suivant
      #! /bin/sh

      DATE=$(date '+%d-%m-%Y-%H:%M:%S')
      PROGRAM="/opt/kde3/bin/konqueror"

      DIALOG=${DIALOG=dialog}
      FILE=`$DIALOG --stdout --title "Choose a file" --fselect /data/home/apn0104/ 14 48`

      case $? in
      0)
      echo "\"$FILE\" selected";;
      1)
      echo "Appuyé sur Annuler.";;
      255)
      echo "Fenêtre fermée.";;
      esac

      if [ "$FILE" != "" ]; then

      gnuplot <<EOF
      set term postscript landscape
      set output 'SPND_SU_PS_${DATE}.ps'

      set xlabel 'Time'
      set ylabel 'Flux'
      set grid
      set nokey
      set title 'SPND Response'
      plot "${FILE##*/}" using 1:2 with lines
      EOF
      fi

      2. est il possible que le fichier selectionné à la souris s'inscrive directement dans la boite de dialogue ou lieu d'être obligé de le taper.

      Nono
      0
    5. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > nonoEW Messages postés 28 Statut Membre
       
      1 - Déjà je n'ai que 31 lignes môa ;-(

      2 - Extrait du man "dialog" :
             --fselect chemin-de-fichier hauteur largeur
                    Le  dialogue  de  sélection de fichier affiche une zone de texte
                    dans laquelle vous pouvez écrire un nom de fichier (ou de réper-
                    toire), et au-dessus deux zones pour les répertoires et les noms
                    de fichier.
      
                    Le chemin-de-fichier peut être un chemin complet, auquel cas les
                    zones  fichiers  et répertoires afficheront le contenu du chemin
                    et la zone texte contient le nom du fichier présélectionné.
      
                    Utilisez  la  tabulation  ou  les  touches  fléchées  pour  vous
                    déplacer entre les zones.  Dans la zone répertoires ou fichiers,
                    utilisez les touches monter/descendre pour  dérouler  la  sélec-
                    tion.   Utilisez la barre d'espace pour copier la sélection dans
                    la zone de texte.
      
      ;-))
      0
  10. nonoEW Messages postés 28 Statut Membre 3
     
    Malheureseument non, je n'ai pas de listing à dispo, je pourrais t'en faire un à la mano mais le matos dont j'ai besoin n'est pas. Je travaille un peu en aveugle en fait...
    Nono
    1
    1. jingmei
       
      bonjour, je me suis tombé sur cette forum très sympa.
      Je voudrais poser une question:
      quand on fait 'u 1:2', dans une script de gnuplot, on peux
      changer le valeur de la colone 1 par '($1/3600)', par exemple.
      Mais dans un script de shell, $1 ne marche plus.
      Est-ce que vous avez comment faire dans ce cas là?
      Merci en avance.
      0
    2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > jingmei
       
      Salut,

      Il faut entourer l'expression de quote-doubles ( "($1/3600)" ) sans quoi la variable "$1" n'est pas interprétée.
      0
    3. jingmei > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
       
      merci, mais je l'ai esseyé, ça ne marche pas.
      0
    4. jingmei > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
       
      ça march!
      avec
      u (\$1/3600):2
      merci bcp!!!!
      0
    5. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > jingmei
       
      Ben merci à toi surtout ;-))
      0
  11. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Euh... quelques infos supplémentaires ne seraient pas de trop.

    Ils arrivent comment ces fichiers dans le répertoire ? A quelle fréquence ? Quotidienne ? hebdo ? Il y en a combien en général ensemble ? etc.
    -1
  12. nonoEW Messages postés 28 Statut Membre 3
     
    Ben en fait c'est des résultats de tests périodiques. Les fichiers sont crées après appui sur un bouton d'une appli
    Je pense que la périodicité du truc devrait être de 1 fichier toute les semaines un peu près à terme (ce n'est pas définis, j'y travaille). Mais pour être sûr disont qu'il est possible d'avoir un enregistrement toutes les 10 minutes pas moins.

    Nono
    -1