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 635
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 635
    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 635
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 635
    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