Posez votre question Signaler

Utiliser des variables Bash dans Awk [Résolu]

allergen - Dernière réponse le 25 avril 2012 à 13:21
Bonjour,
Est-il possible d'utiliser des variabes bash dans les fonctions awk?
Merci
Lire la suite 

Utiliser des variables Bash dans Awk »

20 réponses
Réponse
+2
moins plus
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). ...
Ajouter un commentaire
Réponse
+1
moins plus
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
;-))
Ajouter un commentaire
Réponse
+1
moins plus
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

++
Ajouter un commentaire
Réponse
+0
moins plus
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
zipe31- 23 avril 2012 à 16:31
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

$

;-))
Ajouter un commentaire
Réponse
+0
moins plus
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 
$  
Ajouter un commentaire
Réponse
+0
moins plus
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
fati - 24 avril 2012 à 17:04
j'ai un autre soucis avec awk :)
si je veux chercher que les champs (N3) les lignes < 99,5 dans un fichier qui a cette gueule :
LL-03056-ch-01;03056;100,0;9,460776808238846;11,57593259573581;

LL-00155-ch-01-new;00155;98,06227598566309;26,956437680642868;11,417518861356418;

LL-LA_tfe-06581-pch01;06581;99,18234767025089;0,06666101001873005;0,08125544895152731

w-03057-pch-02;03057;98,31989247311827;6,018736445023228;7,3493499380275145

w-03057-pch-02;03057;99,71989247311827;6,018736445023228;7,3493499380275145

WI_Roma-04032-INF-04032-RM-02_Se0/0/0;05372;0,0;;;

WI_Roma-04032-INF-04032-RM-02-Se0/0/1;05372;0,0;;;Infracom

WI_Warszawa_tfe02;05574;0,20161290322580644;0,03490096074401654;0,01488927894773150

WI_Zurich_tfe-00154-ch-01;00154;0,0;0,4258418792799945;0,22476923076316108;

j'ai utilisé cette comamnde :
awk '{FS=","} $3 < 99,5 {print $0}' a.txt> b.txt
il prends pas en compte la valeur de test es ma syntaxe est corrcte ?
merci
dubcek- 25 avril 2012 à 08:48
le champ 3 contient des caractères non numériques, les supprimer
$ awk -F, '{gsub(";", "", $3)} $3 < 99,5 {print}' a.txt
WI_Roma-04032-INF-04032-RM-02_Se0/0/0;05372;0,0;;;
WI_Roma-04032-INF-04032-RM-02-Se0/0/1;05372;0,0;;;Infracom
$ 
fati - 25 avril 2012 à 13:21
c'est Bon Merci @dubcek
Ajouter un commentaire
Ce document intitulé « Utiliser des variables Bash dans Awk » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?