Utiliser des variables Bash dans Awk

Résolu
Bonjour,

Est-il possible d'utiliser des variabes bash dans les fonctions awk?

Merci
Configuration: Linux
Firefox 2.0.0.14

6 réponses

  1. Contributeur
    oui
    awk '{...}' var1=$var1 var2=$var2
    utiliser var1 et var2 dans le code
    ou
    awk '{...'"$var1"'...}'

    ou
    utiliser le tableau ENVIRON
    ENVIRON
    An array containing the values of the current environment. The array is indexed by the environment variables, each element being the value of that variable (e.g., ENVIRON["HOME"] might be /home/arnold). ...
    9
    1. Modérateur
      Salut,

      Oui, mais il faut soit les déclarer en début du programme "awk" avec l'option "-v variable_awk=$variable_shell" comme expliqué par "dubcek", soit les placer à l'extérieur des quotes entourant la commande "awk".
      Exemple pour la seconde solution :
      [tmpfs]$ cat plop
      Bonjour,
      Est-il possible d'utiliser des variabes bash dans les fonctions awk?
      Merci
      Configuration: Linux
      Firefox 2.0.0.14
      
      [tmpfs]$ var="Linux"
      
      [tmpfs]$ awk '/'"$var"'/ { print $0 }' plop
      Configuration: Linux
      ;-))
      3
      1. Cool jipicy!!!
        0
    2. Merci de votre aide

      Le probleme est résolu
      j'ai pu voir aussi que awk -v varAWK=&varBash '{action}' "file" marche aussi

      Bref l'embaras du choix

      ++
      2
      1. Bonjour,
        [tmpfs]$ awk '/'"$var"'/ { print $0 }' plop --> marche sans soucis
        mais si par exemple dans le fichier :

        Bonjour,
        Est-il possible d'utiliser des variabes bash dans les fonctions awk?
        Merci
        Configuration: Linux
        Configuration: Linuxtest
        Firefox 2.0.0.14

        il affiche:

        Configuration: Linux
        Configuration: Linuxtest

        où j'ai besoin que de la ligne contenant linux seulement (j'ai utilisé ^ et $) mais j'ai pas pu savoir l'emeplacement exacte de ce deux options pour récupérer la chaîne exacte.
        MErci de votre aide
        0
        1. Contributeur
          Salut,

          Il faut utiliser une expression rationnelle comme "\>", qui correspond à une chaîne vide à la fin d'un mot :

          $ cat plop 
          Bonjour,
          Est-il possible d'utiliser des variabes bash dans les fonctions awk?
          Merci
          Configuration: Linux
          Configuration: Linuxtest
          Firefox 2.0.0.14
          
          $ var=Linux
          
          $ awk '/'"${var}\>"'/ { print $0 }' plop
          Configuration: Linux
          
          $

          ;-))
          0
      2. Contributeur
        hello
        $ cat a2  
        Bonjour,  
        Est-il possible d'utiliser des variabes bash dans les fonctions awk?  
        Merci  
        Configuration: Linux  
        Configuration: Linuxtest  
        Firefox 2.0.0.14  
        $   
        $ var="Linux"  
        $ awk '/'"$var"'$/ { print $0 }' a2  
        Configuration: Linux  
        $  
        ou
        $ awk -v var=$var '$0 ~ var "$" { print $0 }' a2 
        Configuration: Linux 
        $  
        
        0
        1. Merci pour ta réponse.
          en plus je veux tester le var sur un champs (numéro 2 dans le fichier), je vais comment stp ?
          Merci
          0
          1. Contributeur
            awk '$2 ~ /'"$var"'$/ { print $0 }'
            0
          2. Merci.
            pour êtrte franc ça n'a pas marcher toujours il y ades résulats en plus
            exeple je cherche 94 dans $2 je trouve : 94, 0994, 09947 ...
            MErci
            0
          3. Contributeur
            Affiche ton fichier, peut être faut-il changer le séparateur par défaut ;-\
            0
          4. QoS__Ohrigstad-06994_vtot-0023-ohrigstad-ce-1,6994,229.69987679211474
            QoS__Cairo-Egypt-06949_R-EP-CAIRO,694,95.58529345878135 126.60342741935483
            QoS__Nyscayah-Monitoring_tfe-06947-rm-01,94,8.4571572580645
            QoS__Teheran-05694_R-EP-05694-TEHERAN-01,5694,637.305823398784

            awk -F="," '/'"$ligne"'$/ { print $0 }' /home/l0360167/REPORTINGWAN/INPUT/rtt.csv >>temprtt.txt
            $ligne corrspend par exemple à la valeur 94
            et je trouve tous les lignes qui sont en dessus
            Merci
            0
          5. Contributeur
            Et tu voudrais afficher quoi exactement ?
            0