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 :

Exécuter un script sur plusieurs fichiers


Sujet :

Shell et commandes GNU

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 14
    Points : 7
    Points
    7
    Par défaut Exécuter un script sur plusieurs fichiers
    bonjour,
    j'ai écrit un script pour tracer un graphe avec le logiciel GMT (generic mapping tools) ou j'ai mis la valeur min et max de mon graphe comme une variable dans le but de tracer plusieurs graphes de touts mes fichiers .DAT
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    set MN = `awk '{print $1,$2}' fichier  | minmax -C `
    set min1 = $MN[1]
    set max1 = $MN[2]
    set min2 = $MN[3]
    set max2 = $MN[4]
     
     
    psxy fichier  -JX15/15 -R$MN[1]/$MN[2]/$MN[3]/$MN[4] -Ba5f1:"temps":/a5f5:" X ":Wsne -W1 -Y5.5 -P > fichier_sortie

    Maintenant, je souhaite, écrire un programme qui traite touts mes fichier j'ai essayer avec foreach mais sa n'a pas marcher aider mois s.v.p

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 387
    Points
    19 387
    Par défaut
    Bonjour,

    kézako ? du Csh ? ce n'est pas le meilleur interpréteur, si je me souviens bien, pour traiter des fichiers par lot.
    t'es obligé ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    vous proposez quelque chose orienter mois s'il vous plaît ce qui est obligatoire c'est de tracez les graphe

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 387
    Points
    19 387
    Par défaut
    que contient le fichier fichier ?
    que fait le programme minmax -C ? il est probablement inutile, awk pouvant plus que de simplement couper des lignes : c'est un langage puissant;
    de sorte qu'à la fin on aurait que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    psxy fichier  -JX15/15 -R$(awk 'traitement}') -Ba5f1:"temps":/a5f5:" X ":Wsne -W1 -Y5.5 -P > fichier_sortie
    , voire même un seul awk, qui ferait un "appel system", pour exécuter la commande psxy après analyse et traitement du fichier.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    bon; voila le contenu de mon fichier
    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
    19
    20
    21
    22
    23
    24
    1 25935.2
    2 25932.5
    3 25930.8
    4 25931.7
    5 25933.5
    6 25934.1
    7 25927.2
    8 25928.6
    9 25929.1
    10 25930.6
    11 25937.3
    12 25938.1
    13 25951.6
    14 25949.8
    15 25943.3
    16 25943.2
    17 25937.4
    18 25925.3
    19 25929.7
    20 25930.3
    21 25936.6
    22 25935.2
    23 25936.1
    24 25945.3

    et voila ce que donne la commande minmax -C


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    minmax -C fichier 
    1	24	25925.3	25951.6
    et pour le code de psxy je pense pas peut la modifier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    psxy $input -JX12/12 -R-10/10/-1/20 -Ba2f1:"x":/a5f2.5:"exp(x)":WS -W10 -P > $output
    JX type de projection
    -R c'est xmin/xmax/ymi/ymax
    Ba2f1 et a5f2.5 c'est l’Échelle
    et ce qui reste c'est la couleur et le l’épaisseur de la ligne ..etc
    merci beaucoup pour votre attention

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 387
    Points
    19 387
    Par défaut
    voilà ce que j'ai compris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #!/bin/sh
     
    for f in ./* #il faut définir le chemin du répertoire qui contient les fichiers
    do
       xyMinMax=$(awk '{for(i=1;i<=NF;i++){ if(! minCol[i] ||$i<minCol[i]){minCol[i]=$i}; if(! maxCol[i] || $i>maxCol[i]){maxCol[i]=$i} } }; END{ print minCol[1]"/"maxCol[1]"/"minCol[2]"/"maxCol[2] }' fichier)
       psxy "$f" -JX12/12 -R"$xyMinMax" -Ba2f1:"x":/a5f2.5:"exp(x)":WS -W10 -P #si la commande a besoin d'une indication pour afficher les données sur la sortie standard, ajouter un tiret
    done  > $output #s'il n'y a qu'un fichier output
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2014
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    oui c'est ça mais lorsque j’exécute le programme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #!/bin/sh
     
    for f in ~/home/anis/Bureau/minmax/*.DAT  #il faut définir le chemin du répertoire qui contient les fichiers
    do
      xyMinMax = $(awk '{for(i=1;i<=NF;i++){ if(! minCol[i] ||$i<minCol[i]){minCol[i]=$i}; if(! maxCol[i] || $i>maxCol[i]){maxCol[i]=$i} } }; END{ print minCol[1]"/"maxCol[1]"/"minCol[2]"/"maxCol[2] }' ALGR08205_1SEC.DAT) 
       psxy $f -JX12/12 -R"$xyMinMax" -Ba2f1:"x":/a5f2.5:"exp(x)":WS -W10 -P > ALGR08205_1SEC.DAT.ps #si la commande a besoin d'une indication pour afficher les données sur la sortie standard, ajouter un tiret
    done
    je reçois ce message d'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for: No match.
    do: Command not found.
    Illegal variable name.
    donc je ne c'est pas si on peut écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xyMinMax = $(awk '{for(i=1;i<=NF;i++).........................ext
    je suis débutant

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 387
    Points
    19 387
    Par défaut

    avant de modifier quoi que ce soit : le faire fonctionner avec le bon interpréteur. je n'ai pas mis d'espaces autour du =.

    pour exécuter le script, il faut le rendre exécutable (chmod u+x monScript), puis le lancer avec son chemin relatif ou absolu (dans le répertoire courant : ./monScript).
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  9. #9
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Bonjour,

    dans un shell (un émulateur de terminal, par exemple), peux-tu taper la commande suivante, et nous donner le résultat?
    Pourquoi pas ceci?
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/12/2010, 19h42
  2. lancer script sur plusieurs fichiers
    Par ricololo dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 11/03/2009, 23h02
  3. Réponses: 1
    Dernier message: 27/11/2008, 11h41
  4. un script sur plusieurs fichiers "functions.m"
    Par prologO dans le forum MATLAB
    Réponses: 12
    Dernier message: 18/12/2007, 17h37
  5. Réponses: 4
    Dernier message: 03/12/2004, 11h18

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