Problème de condition en shell
Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

Problème de condition en shell



  1. #1
    Frevile-34

    Problème de condition en shell


    ------

    Bonjour
    J'ai un problème pour écrire les conditions correctement.
    Je m'explique j'ai plusieurs fichiers (600) avec des informations que je veux extraire.
    Le problème c'est que ces fichiers on un nom plutôt gênant ==> MN-900-slow.00001.node_data jusqu'au fichier MN-900-slow.00600.node_data
    évidement les 0000 dans le nom son très embétant pour faire une boucle simple j'ai donc essayer d'écrire des conditions mais apparemment je m'y suis mal pris.
    Je vous joint mon script si vous avez un solution ou une idée je suis preneur.
    Merci a vous

    Code:
    #!/bin/bash
    
    ##Plot les isotherme
    ###
    
    ###     USAGE:  ./isotherme.sh
    
    ####Code de base
    
    
    #awk '{printf("%.0f %.0f %.13f\n" ,$2,$3,$5)}' MN-900-slow.00001.node_data > outT.txt
    
    #xyz2grd outT.txt -GoutT.grd -R0/360000/0/120000 -I5000 -V
    
    ##palette couleur
    #makecpt -CGMT_jet.cpt -Z -T273/1619/0.01 -V > T.cpt
    
    ##affichage
    #grdimage outT.grd -JX60/-20 -V -P -R0/360000/0/120000 -CT.cpt -B50000g400000:"X(m)":/10000g1000000:"Z(m)":WSne -Y70 -X5 -K > isotherme.ps
    #grdcontour outT.grd -JX -V -P -R0/360000/0/120000  -C100 -W5/255/0/0 -A100 -K -O >> isotherme.ps
    #psscale -D30/-3/10/0.4h -CT.cpt -B300:"T (K)": -O >> isotherme.ps
    
    
    
    #evince isotherme.ps &
    
    ##Code avec variable
    
    #palette couleur
    makecpt -CGMT_jet.cpt -Z -T273/1619/0.01 -V > T.cpt
    
    
    #Debut de la boucle
    
    for ((i=1;i<=600;i+=1))
    do
    
    if [ i<10 ] 
    then
    #Selection des données
    awk '{printf("%.0f %.0f %.13f\n" ,$2,$3,$5)}' MN-900-slow.0000$i.node_data > outT$i.txt
    elif [ i<100 ]
    then
    awk '{printf("%.0f %.0f %.13f\n" ,$2,$3,$5)}' MN-900-slow.000$i.node_data > outT$i.txt
    elif [ i<1000 ]
    then
    awk '{printf("%.0f %.0f %.13f\n" ,$2,$3,$5)}' MN-900-slow.00$i.node_data > outT$i.txt
    fi
    
    #Définition du MinMax
    minmax outT$i.txt -C > minmaxout
    
    #Definition des variable Xmin et Xmax
    Xmin=$(awk '{print ($1)}' minmaxout | bc -l)
    Xmax=$(awk '{print ($2)}' minmaxout | bc -l)
    echo Xmin=$Xmin
    echo Xmax=$Xmax
    #Conversion du xyz en grd 
    xyz2grd outT$i.txt -GoutT.grd -R$Xmin/$Xmax/0/120000 -I5000 -V
    
    
    #affichage
    grdimage outT.grd -JX60/-20 -V -P -R0/360000/0/120000 -CT.cpt -B50000g400000:"X(m)":/10000g1000000:"Z(m)":WSne -Y70 -X5 -K > isotherme$i.ps
    grdcontour outT.grd -JX -V -P -R0/360000/0/120000  -C100 -W5/255/0/0 -A100  -K -O >> isotherme$i.ps
    psscale -D30/-3/10/0.4h -CT.cpt -B300:"T (K)": -O >> isotherme$i.ps
    
    #Fin de la boucle
    done
    
    
    #evince isotherme.ps&

    -----

  2. #2
    kwariz

    Re : Problème de condition en shell

    Bonjour,

    la page man de test donne :
    Code:
    TEST(1)                                                 User Commands                                                 TEST(1)
    
    
    NAME
           test - check file types and compare values
    
    
    SYNOPSIS
           test EXPRESSION
           test
    
    
           [ EXPRESSION ]
           [ ]
           [ OPTION
    
    
    DESCRIPTION
           Exit with the status determined by EXPRESSION.
    
    ..........
    
           INTEGER1 -eq INTEGER2
                  INTEGER1 is equal to INTEGER2
    
    
           INTEGER1 -ge INTEGER2
                  INTEGER1 is greater than or equal to INTEGER2
    
    
           INTEGER1 -gt INTEGER2
                  INTEGER1 is greater than INTEGER2
    
    
           INTEGER1 -le INTEGER2
                  INTEGER1 is less than or equal to INTEGER2
    
    
           INTEGER1 -lt INTEGER2
                  INTEGER1 is less than INTEGER2
    
    
           INTEGER1 -ne INTEGER2
                  INTEGER1 is not equal to INTEGER2
    ......
    Les caractères < > sont utilisés pour les indirections, il faut donc utiliser les opérateurs décris plus haut.

    Tu peux également regarder du côté de la commande seq et essayer un :
    Code:
    for i in `seq -w 600`
    do
      echo MN-900-slow.00$i.node_data
    done
    seq start end increment crée une séquence de start à end avec une incrément de increment, l'option -w rajoute les 0 nécessaires à gauche.

  3. #3
    Frevile-34

    Re : Problème de condition en shell

    Je ne suis pas sur d'avoir compris
    Il faut que je crée une séquence de nombre
    Code:
    seq -w 600
    que j'injecte dans le nom de mon fichier ???
    Ou il faut que je crée une liste de nombre
    Code:
    seq -w 1 1 600
    que j'enregistre dans une tableau et que j'apelle ensuite dans le nom de mon fichier???

    quelque chose du genre en faite
    Code:
    for ((i=1;i<=600;i+=1))
    do
    seq -w i > numfichier
    numfichier=$(awk '{print ($1)}' numfichier.txt | bc -l)
    awk '{printf("%.0f %.0f %.13f\n" ,$2,$3,$5)}' MN-900-slow.00$numfichier.node_data > outT$i.txt
    ect ........

  4. #4
    Chanur

    Re : Problème de condition en shell

    Bonjour,
    et simplement :
    Code:
    nawk 'BEGIN{ for (i=1; i<=600; i++) printf ("MN-900-slow.%05d.node_data\n", i) }'
    pour générer les noms de fichier, ça ne suffit pas ?

    Et pour boucler ça donne :
    Code:
    nawk 'BEGIN{ for (i=1; i<=600; i++) printf ("MN-900-slow.%05d.node_data\n", i) }' |
    while read nom_fichier
    do
            #ici le traitement a effectuer
            echo traitement $nom_fichier
    done
    Ce qui se conçoit bien s'énonce clairement ; et les mots pour le dire arrivent aisément.

  5. A voir en vidéo sur Futura
  6. #5
    kwariz

    Re : Problème de condition en shell

    Citation Envoyé par Frevile-34 Voir le message
    Je ne suis pas sur d'avoir compris
    Il faut que je crée une séquence de nombre
    Code:
    seq -w 600
    que j'injecte dans le nom de mon fichier ???
    Ou il faut que je crée une liste de nombre
    Code:
    seq -w 1 1 600
    que j'enregistre dans une tableau et que j'apelle ensuite dans le nom de mon fichier???

    quelque chose du genre en faite
    Code:
    for ((i=1;i<=600;i+=1))
    do
    seq -w i > numfichier
    numfichier=$(awk '{print ($1)}' numfichier.txt | bc -l)
    awk '{printf("%.0f %.0f %.13f\n" ,$2,$3,$5)}' MN-900-slow.00$numfichier.node_data > outT$i.txt
    ect ........
    Non, du tout. Tu as essayé mon dernier exemple de code ?
    Le plus simple est :
    Code:
    for i in `seq -w 600`
    do
      awk '{printf("%.0f %.0f %.13f\n" ,$2,$3,$5)}' MN-900-slow.00$numfichier.node_data > outT$i.txt
      etc ...
    La syntaxe portable et classique du for étant : for variable in ensemble de valeurs. Avec le code proposé ci-dessus, i prendra successivement les valeurs 000, 001, ...., 599,600.

  7. #6
    Frevile-34

    Re : Problème de condition en shell

    Finalement avec
    Code:
    for i in $(seq-w 1 1 600)
    le problème est résolue.
    Un grand merci a vous tous.
    Kévin

Discussions similaires

  1. Condition de jauge de lorentz problème de dérivation
    Par invite10b4d426 dans le forum Physique
    Réponses: 1
    Dernier message: 18/10/2008, 23h15
  2. probleme de condition limite sous mathematica
    Par invite5871860b dans le forum Physique
    Réponses: 1
    Dernier message: 27/09/2008, 01h53
  3. Hydrodynamique, problème de condition aux limites
    Par Alexander dans le forum Physique
    Réponses: 2
    Dernier message: 25/08/2007, 16h09
  4. problème sur les probabilité et condition d'independance
    Par invite75d60527 dans le forum Mathématiques du collège et du lycée
    Réponses: 11
    Dernier message: 13/04/2007, 14h31
  5. Problème avec SHELL.dll
    Par invite5c1e449d dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 29/03/2006, 15h12