Extraire variable de awk

Extraire variable de awk - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 19-10-2011 à 17:00:45    

Bonjour,
 
Je suis en train de découvrir awk. Je l'utilise depuis un script en bash sur lunix.
 
Après plusieurs recherche j'ai réussi à  définir des variables shell dans awk grâce à awk -v variable_awk=$variable_shell
 
Par contre pour faire l'inverse je ne trouve aucune page qui en parle. Je met ma main à couper que j'utilise les mauvais mot clé.
 
J'ai essayé de redéfinir la variable dans le bloc END mais ça ne fonctionne pas. Voici un des test que j'ai réalisé
 

Code :
  1. #!/bin/bash
  2. salut="coucou"
  3. awk -v salut=$salut '{
  4.   print "Variable en awk = " salut
  5.   salut_awk = "coucou_awk"
  6. }
  7. END {
  8. print "fin du script la variable salut vaut toujours " salut
  9. print "la nouvelle variable salut_awk vaut " salut_awk
  10. }' /home/percherie/Bureau/proglist.txt
  11. echo "retour de awk vaut : " $salut_awk

Reply

Marsh Posté le 19-10-2011 à 17:00:45   

Reply

Marsh Posté le 22-10-2011 à 00:13:19    

Salut,
 
c'est pas des plus propre, mais je voit pas comment faire autrement :
 

Code :
  1. stemp=$(awk 'BEGIN{print "salut_awk=bar"}')
  2. eval "$stemp"
  3. echo $salut_awk


 
Le probleme c'est qu'on pourrait appeler system() dans awk, mais comme ca crèe un sous shell, ton shell courant ne
"verra" pas la variable. Sinon, on pourrais utiliser des file-descriptors, mais bon, c'est un peu lourdingue.
 
Le mieux serais de savoir ce que tu cherches à faire pour trouver une autre solution à moins que la question était
d'ordre générale.


Message édité par sputnick le 22-10-2011 à 00:13:33
Reply

Marsh Posté le 23-10-2011 à 21:12:47    

Le problème était d'ordre général. Je n'avais pas compris les conseils obtenu sur l'amélioration de mon script. awk doit être utilisé pour autre chose que ce que j'avais en tête.
 
J'ai même trouvé mieux en utilisant Shell-Parameter-Expansion (en anglais)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed