Rechercher : dans
Par :

Script Shell pour tracé avec Gnuplot

Dernière réponse le 6 aoû 2008 à 14:31:29 nonoEW, le 2 aoû 2008 à 17:35:11 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « Script Shell pour tracé avec Gnuplot » dans :
Exécuter un script shell VoirExécution d'un script Pour pouvoir exécuter un script ou un programme en ligne de commande il y a plusieurs possibilités : 1. Le chemin absolu 2. Le chemin relatif 3. Modifier la variable PATH Note: Le Sha...

1

jipicy, le 2 aoû 2008 à 17:50:57

Salut,

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

gnuplot fichier.txt


;-)) JP - Éleveur de pingouins -
Faites un geste pour l'environnement, fermez vos fenêtres et adoptez un manchot.

Répondre à jipicy

2

nonoEW, le 3 aoû 2008 à 14:54:31

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

Répondre à nonoEW

3

jipicy, le 3 aoû 2008 à 15:35:23

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...
JP - Éleveur de pingouins -
Faites un geste pour l'environnement, fermez vos fenêtres et adoptez un manchot.

Répondre à jipicy

4

nonoEW, le 4 aoû 2008 à 13:50:13

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

Répondre à nonoEW

5

jipicy, le 4 aoû 2008 à 14:18:08
  • +1

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.
JP - Éleveur de pingouins -
Faites un geste pour l'environnement, fermez vos fenêtres et adoptez un manchot.

Répondre à jipicy

6

nonoEW, le 4 aoû 2008 à 16:02:44

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

Répondre à nonoEW

7

jipicy, le 4 aoû 2008 à 16:12:14

Re-

Oui c'est possible.

Mais faut-il encore savoir comment différencier le dernier fichier de log ? Date ? Nom ?
JP - Éleveur de pingouins -
Faites un geste pour l'environnement, fermez vos fenêtres et­ adoptez un manchot.

Répondre à jipicy

8

nonoEW, le 4 aoû 2008 à 16:20:11

Le fichier de log devrait toujours être différencié par la date et son nom devrait avoir la forme suivante :
data_${DATE}.log

Nono

Répondre à nonoEW

9

jipicy, le 4 aoû 2008 à 16:32:51

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.
JP - Éleveur de pingouins -
Faites un geste pour l'environnement, fermez vos fenêtres et­ adoptez un manchot.

Répondre à jipicy

10

nonoEW, le 4 aoû 2008 à 16:41:51

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

Répondre à nonoEW

11

jipicy, le 4 aoû 2008 à 16:44:14

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...
JP - Éleveur de pingouins -
Faites un geste pour l'environnement, fermez vos fenêtres et­ adoptez un manchot.

Répondre à jipicy

13

nonoEW, le 5 aoû 2008 à 10:02:30

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

Répondre à nonoEW

14

nonoEW, le 5 aoû 2008 à 14:21:53

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

Répondre à nonoEW

15

jipicy, le 5 aoû 2008 à 14:56:50

plot "${FILE##*/}"
;-))
JP - Éleveur de pingouins -
Faites un geste pour l'environnement, fermez vos fenêtres et adoptez un manchot.

Répondre à jipicy

16

nonoEW, le 5 aoû 2008 à 17:19:56

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

Répondre à nonoEW

17

jipicy, le 5 aoû 2008 à 17:25:00

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.
;-))
JP - Éleveur de pingouins -
Faites un geste pour l'environnement, fermez vos fenêtres et adoptez un manchot.

Répondre à jipicy

18

nonoEW, le 5 aoû 2008 à 17:34:17

Désolé, je craque un peu sur le shell c'est tout nouveau du coup j'oublie que ya le man pour aider...

Sinon, ouai 31 lignes peut être mais je ne vois pas pourquoi y a une erreur du coup j'ai l'impression que mon test ne fonctionne pas

Nono

Répondre à nonoEW

19

jipicy, le 5 aoû 2008 à 18:04:50

Rajoute "set -xv" après la ligne shebang (#! /bin/sh) pour rendre ton script verbeux...
JP - Éleveur de pingouins -
Faites un geste pour l'environnement, fermez vos fenêtres et adoptez un manchot.

Répondre à jipicy

20

nonoEW, le 6 aoû 2008 à 09:56:52

Merci pour la façon de débugger.
Sinon, l'instruction dialogue ne me plait pas pour selectionner mon fichier de point, j'ai décidé d'utiliser
kdialog --openfilename $HOME "*.log"
pour selectionner mes fichiers de points... Je trouve ça plus propre.
PAr contre je ne parviens pas à récupérer le fichier sélectionner. Cela ne se passe pas comme avec dialog ?

Nono

Répondre à nonoEW

21

jipicy, le 6 aoû 2008 à 10:15:29

Utilises alors "Xdialog". C'est la même syntaxe que "dialog" mais en environnement graphique...

Sinon, concernant kdialog, il devrait normalement te retourner comme avec dialog le nom du fichier précédé de son chemin, et la syntaxe "${var##*/}" devrait être opérationnelle aussi ;-\

PS. T'as pu résoudre ton problème d'erreur ?
JP - Éleveur de pingouins -
Faites un geste pour l'environnement, fermez vos fenêtres et adoptez un manchot.

Répondre à jipicy

22

nonoEW, le 6 aoû 2008 à 10:42:43

Oui effectivement il devrait normalement retourner la même chose, le truc c'est qu'avec kdialog, je ne peux pas écrire
FILE=kdialog --getopenfilename $HOME "*.log"
car j'ai une erreur direct et je n'arrive pas à renvoyer la varaible sélectionnée
Sinon, je n'utilise pas Xdialog car cela ne fonctionne pas avec mon environnement de travail d'où kdialog qui me parait bien exepté pour ce petit problème...

Sinon, je n'ai pas "encore" resolu mon erreur mais en naviguant sur d'autre forum je m'aperçois que c'est courant comme erreur avec les structures conditions donc j'investigue encore

Nono

Répondre à nonoEW

23

jipicy, le 6 aoû 2008 à 10:44:49

Essaie plutôt comme ça :

FILE=$(kdialog --getopenfilename $HOME "*.log") 

JP - Éleveur de pingouins -
Faites un geste pour l'environnement, fermez vos fenêtres et adoptez un manchot.

Répondre à jipicy

24

nonoEW, le 6 aoû 2008 à 11:13:29

Ok, ça marche !!!
Par contre ma structure condition me sort toujours l'erreur.
C'est pas bon comme ça ? 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

ça me sort tjrs "syntax error line 33 : unexpected end of line"
PS: la ligne 33 étant la ligne après le fi


Nono

Répondre à nonoEW

25

jipicy, le 6 aoû 2008 à 11:18:19

if ( "$FILE" != "" )

Non faut des crochets et pas des accolades :
if [ "$FILE" != "" ]
JP - Éleveur de pingouins -
Faites un geste pour l'environnement, fermez vos fenêtres et adoptez un manchot.

Répondre à jipicy

26

nonoEW, le 6 aoû 2008 à 11:27:26

Et non, même topo, l'execution s'arrête à gnuplot << EOF avec la même erreur que je t'ai citée tout à l'heure...
J'ai essayé de mettre les instructions de tracé avec gnuplot dans le case 0) mais j'ai aussi la même erreur!

J4ai un peu de mal à capter le pb là
Nono

Répondre à nonoEW

27

jipicy, le 6 aoû 2008 à 11:33:44

Le "EOF" final est bien en début de ligne, sans espace ni avant ni après et bien tout seul sur la ligne ?
JP - Éleveur de pingouins -
Faites un geste pour l'environnement, fermez vos fenêtres et adoptez un manchot.

Répondre à jipicy

28

nonoEW, le 6 aoû 2008 à 11:40:38

Ah, non boulette... C'était ça l'erreur. Maintenant ça marche bien. Mille Merci !
Mais pourquoi doit on le mettre en début de ligne comme cela ?

Nono

Répondre à nonoEW

29

jipicy, le 6 aoû 2008 à 11:44:46

Ça faudra demander au(x) développeur(s) qui a (ont) conçu le code ;-))
JP - Éleveur de pingouins -
Faites un geste pour l'environnement, fermez vos fenêtres et adoptez un manchot.

Répondre à jipicy

30

 nonoEW, le 6 aoû 2008 à 14:31:29

Arf, ben c'est bon a savoir en tout cas tout ça
Merci bcp jipicy

Répondre à nonoEW

12

nonoEW, le 4 aoû 2008 à 17:10:21

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

Répondre à nonoEW