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 :

AWK - Tester deux variables introduites à partir du shell


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5
    Par défaut AWK - Tester deux variables introduites à partir du shell
    Bonjour,

    Je me casse les dents sur le programme suivant (présenté ici seulement sous forme d'extrait) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    awk -F '\t'  -v complet=foo -v partiel=bar '{
               ...
               if ($4==complet) stop=oui
               if (stop==oui && $4==partiel) exit
               ...
               }'
    Tant que j'utilise les variables "complet" et "partiel" dans le script, je n'obtiens aucun résultat à l'écran. Si, par contre, je remplace "partiel" par sa valeur directement dans le script, en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (stop==oui && $4==bar) exit
    J'obtiens le résultat attendu. Si, de même, je remplace les deux variables par leur valeur...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if ($4==foo) stop=oui
    if (stop==oui && $4==bar) exit
    ... j'obtiens toujours le résultat attendu. Mais, si je remplace uniquement la première variable par sa valeur, je n'ai encore aucun résultat à l'écran.

    D'où vient cette bizarrerie ? Dois-je corriger quelque chose dans ma manière de tester la valeur des variables ?

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

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

    pareil pour le test,
    sinon, pour awk, oui est un nom de variable.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5
    Par défaut
    Merci pour votre réponse. Je viens de faire quelques essais, mais je ne parviens toujours pas à tester correctement les variables. Par exemple, avec un fichier texte comprenant...
    ... si je fais...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk 'BEGIN {a=b} {if ($1=="a") print}'
    j'obtiens...
    ... plutôt que...
    Comment, dès lors, indiquer à awk qu'il doit traiter une variable, et pas une chaîne de caractères ?

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 657
    Par défaut
    avec awk
    si tu veux tester une variable, tu ne mets pas de guillemets.
    si tu veux tester un texte, tu mets des guillemets.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5
    Par défaut
    Encore merci, cette fois c'est bon j'ai saisi !

    Pour reprendre l'exemple du dessus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk 'BEGIN {a="b"} {if ($1==a) print}' fichier
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -v a=b '{if ($1==a) print}' fichier
    ont une syntaxe correcte.

    Je ne pensais pas que l'usage des quotes était si important avec awk. En tout cas, merci beaucoup !

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

Discussions similaires

  1. Tester présence variable dans fichier en shell
    Par cobra85 dans le forum Linux
    Réponses: 1
    Dernier message: 13/07/2009, 18h48
  2. [AJAX] Tester l'égalité entre deux variable
    Par DeeVoiD dans le forum AJAX
    Réponses: 6
    Dernier message: 14/04/2009, 14h07
  3. Boucle for à partir de deux variables de deux listes
    Par bourgui78 dans le forum Général Python
    Réponses: 2
    Dernier message: 08/08/2008, 16h24
  4. Réponses: 1
    Dernier message: 15/03/2008, 20h24
  5. affectation d'une variable a partir du shell
    Par baguinga dans le forum C
    Réponses: 2
    Dernier message: 15/10/2007, 10h10

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