Utiliser des variables Bash dans Awk

Résolu
allergen -  
 Konrad -
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. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    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
  2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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. Konrad
       
      Cool jipicy!!!
      0
  3. allergen
     
    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
  4. fati
     
    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. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    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
  7. fati
     
    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. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      awk '$2 ~ /'"$var"'$/ { print $0 }'
      0
    2. fati
       
      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. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Affiche ton fichier, peut être faut-il changer le séparateur par défaut ;-\
      0
    4. fati
       
      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. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Et tu voudrais afficher quoi exactement ?
      0