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 :

Structure if ;then; fi


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Février 2011
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2011
    Messages : 176
    Par défaut Structure if ;then; fi
    bonjour,
    j'ai besoin de comprarer deux colonnes et à chaque fois j'associe un 1 ou 0 selon les conditions , si champ 4 >= champ6 donc je mets V à 1 et F à 0, si non l'inverse
    voici mon petit code :
    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
     
    while read ligne
    do
    if [$4 -ge $6];
    then 
    V=1
    F=0
    else 
    V=0
    F=1
    fi 
    col1=$(echo "$ligne"| cut -d" " -f1)
    col2=$(echo "$ligne"| cut -d" " -f2)
    echo "$col1 $col2 $V $F" >> res 
    done < resultat
    le problème est qu'en résultat j'aurai toujours le cas 1 traité, pas de else , tous mes champs sont V à 1 et F à 0 !!!! alors dans mes données d'origine j'ai les deux conditions
    Je vois pas ma faute oû

    Merci

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Salut,

    Le shell ignore à quoi correspondent $4 et $6, faute de les lui passer en paramètre


    À quoi ressemble les lignes de ton fichier resultat ?

  3. #3
    Membre très actif
    Profil pro
    Inscrit en
    Février 2011
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2011
    Messages : 176
    Par défaut
    en fichier résultat j'aurai qq chose comme ça par exemple :
    fic n V F
    1 6 1 0
    2 6 1 0
    3 6 1 0
    4 6 1 0
    5 6 1 0
    donc il ignore $4 et $6 , ok j'ai mélangé avec awk

    Merci à tous

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Citation Envoyé par AJ_ing Voir le message
    donc il ignore $4 et $6, je dois les initialiser pour dire que ces colonne 4 et 6 comme j'ai fais
    Tout a été dit par N_BaH et al1_24

  5. #5
    Membre très actif
    Profil pro
    Inscrit en
    Février 2011
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2011
    Messages : 176
    Par défaut
    Un petit souci, les expressions doivent être tous des entiers ???
    mes données contiennent des nombres négatifs !!!
    Erreur :
    -1.000 : nombre entier attendu comme expression
    comment faire ?

  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 AJ_ing Voir le message
    Un petit souci, les expressions doivent être tous des entiers ???
    mes données contiennent des nombres négatifs !!!
    Erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    -1.000 : nombre entier attendu comme expression
    comment faire ?
    C'est pas le fait que le nombre soit négatif qui gêne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ test -5 -ge -4 ; echo $?
    1
    $ test -5 -ge -6 ; echo $?
    0
    C'est plutôt le fait que ce ne soient pas des entiers!
    Comme l'indique assez justement et assez précisément le message d'erreur!

    Il y a des millions de référence sur internet sur la comparaison de nombres flottants.

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

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

    $4 et $6 sont des paramètre positionnels
    contrairement à awk, il ne s'agit pas des numéros des colonnes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while read col1 col2 col3 col4 col5 col6 reste
    do if test $col4 -ge $col6
       then ...
       fi
    done < resultat
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  8. #8
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 134
    Par défaut
    C'est juste que les paramètres $4 et $6 sont lus dans les arguments de la ligne de commande de ton script, pas dans le retour de la commande read.
    Ce que tu attendais est le mode de fonctionnement de awk

    Tu peux faire cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    while read par1 par2 par3 par4 par5 par6
    do
      if [ ${par4} -ge ${par6} ]
      then 
        V=1
        F=0
      else 
        V=0
        F=1
      fi 
      col1=${par1}
      col2=${par2}
      echo "$col1 $col2 $V $F" >> res 
    done < resultat
    edit : grilled
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

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

Discussions similaires

  1. Limiter les Structures décisionnelles If Then
    Par KingKev dans le forum Macros et VBA Excel
    Réponses: 23
    Dernier message: 01/02/2011, 15h03
  2. Aide structure if then fi
    Par efelant dans le forum Shell et commandes GNU
    Réponses: 7
    Dernier message: 09/12/2008, 11h02
  3. [XSLT] Comment utiliser une structure de type if-then-ELSE ?
    Par ribrok dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 27/11/2006, 12h39
  4. Structure if then else
    Par byloute dans le forum Linux
    Réponses: 13
    Dernier message: 04/10/2005, 08h36
  5. [TagLib] Structure if then else
    Par mush_H dans le forum Taglibs
    Réponses: 5
    Dernier message: 19/07/2005, 15h31

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