A voir également:
- [Awk] appel variable système dans script awk
- Script vidéo youtube - Guide
- Restauration systeme - Guide
- Appel anonyme - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans system - Guide
- Nommez une application d'appel vidéo ou de visioconférence - Guide
5 réponses
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
1 avril 2009 à 17:52
1 avril 2009 à 17:52
Salut,
Ta syntaxe pour ta variable "CommandLine" n'est pas bonne :
Ta syntaxe pour ta variable "CommandLine" n'est pas bonne :
CommandLine=$(awk -F \"=\" '$1==out {print $2 }' "$PATTERN"/chemin.ini| head -n 1)Devrait aller mieux ;-))
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
2 avril 2009 à 09:28
2 avril 2009 à 09:28
Oups ;-(
J'avais pas fait attention à ces anti-slashs en trop :
J'avais pas fait attention à ces anti-slashs en trop :
CommandLine=$(awk -F "=" '$1==out {print $2 }' "$PATTERN"/chemin.ini| head -n 1)
Ca le fait couiner pour autre chose maintenant.
J'ai tenté avec en retirant les ' sans plus de succès.
Comme je te dis la syntaxe semble fonctionner parfaitement sur le reste de mon script, sauf dans le cas où j'essaye de passer ma variable système dedans.
Peut être existe il un moyen de "protéger" cette variable ou de l'enregistrer dans une variable intermédiaire.
awk: desadv_bl_tst.awk:574: CommandLine=$(awk -F "=" '$1==out {print = $2 }' "$PATTERN"/chemin.ini| head -n 1) awk: desadv_bl_tst.awk:574: ^ invalid char ''' in expression
J'ai tenté avec en retirant les ' sans plus de succès.
Comme je te dis la syntaxe semble fonctionner parfaitement sur le reste de mon script, sauf dans le cas où j'essaye de passer ma variable système dedans.
Peut être existe il un moyen de "protéger" cette variable ou de l'enregistrer dans une variable intermédiaire.
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
2 avril 2009 à 09:51
2 avril 2009 à 09:51
Essaye en enlevant l'espace :
awk -F"=";-\
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
2 avril 2009 à 10:33
2 avril 2009 à 10:33
Ben je ne comprends pas ;-\
J'ai pris une variable système sur mon PC ($MAIL) et voilà ce que ça donne :
J'ai pris une variable système sur mon PC ($MAIL) et voilà ce que ça donne :
jp@MDK:~/tmpfs ssh$ echo $MAIL /var/spool/mail/jp jp@MDK:~/tmpfs ssh$ awk -F":" '$1 ~ /Status/ { print $2 }' $MAIL | head -1 RO jp@MDK:~/tmpfs ssh$ var=$(awk -F":" '$1 ~ /Status/ { print $2 }' $MAIL | head -1) jp@MDK:~/tmpfs ssh$ echo $var RO jp@MDK:~/tmpfs ssh$;-))
Je suis tout a fait d'accord avec toi, chez moi aussi ca fonctionne dans ces conditions.
Mais dès que j'essaye de passer tout ca dans un fichier script .awk, ca se met à ne plus fonctionner et ca ne me parait pas être un problème de syntaxe du commandline puisque j'arrive à l'utiliser tel que je l'écrit pour tout le reste de mon script.
Bizarre autant qu'étrange, non ?
Mais dès que j'essaye de passer tout ca dans un fichier script .awk, ca se met à ne plus fonctionner et ca ne me parait pas être un problème de syntaxe du commandline puisque j'arrive à l'utiliser tel que je l'écrit pour tout le reste de mon script.
Bizarre autant qu'étrange, non ?
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
>
Daakon
2 avril 2009 à 10:52
2 avril 2009 à 10:52
dans un fichier script .awk
C'est à dire ?
C'est awk qui appelle ce fichier ou ton shell ?
Que contient exactement ce fichier ?
C'est à dire ?
C'est awk qui appelle ce fichier ou ton shell ?
Que contient exactement ce fichier ?
Daakon
>
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
2 avril 2009 à 11:30
2 avril 2009 à 11:30
C'est à dire que j'ai un fichier desadv_bl.awk qui contient toute une série de commandes qui traite de trucs assez complexes. (un fichier que je n'ai pas écrit moi même pour ne rien te cacher).
ce script est apellé avec une commande passée directement en ligne :
Tout fonctionne nickel sans que j'y touche, la seule chose que je veux faire est d'ajouter une fonction qui va lire une information du fichier chemin.ini et l'affecter à une variable que je souhaite utiliser pour la suite.
Code de ma fonction :
Je tiens à préciser que faute de comprendre ce que je faisais, j'ai repris la syntaxe exacte d'une autre fonction présente dans ce script et qui fonctionne :
Le retour se fait nickel dans ces conditions et j'arrive à récupérer mon commentaire.
Vraiment, la seule différence que je detecte c'est que je n'arrive pas à apeller ma variable $Pattern dans ce script.
ce script est apellé avec une commande passée directement en ligne :
awk -f desadv_bl.awk < test.tx
Tout fonctionne nickel sans que j'y touche, la seule chose que je veux faire est d'ajouter une fonction qui va lire une information du fichier chemin.ini et l'affecter à une variable que je souhaite utiliser pour la suite.
Code de ma fonction :
function trouveChemin (pattern){ #Remarque : je passe à la fonction pattern=out, ce qui explique ma mise en commentaire plus bas print "pattern : " pattern # Le print marche nickel, le bon paramètre est passé, pas de problèmes. sauvegardeLigne=$0 $0="" PATTERN2= "$PATTERN"/chemin.ini print "PATTERN2 :" PATTERN2 # Il s'agit du relicat d'un de mes tests. J'avais essayé d'affecter la valeur de "$PATTERN"/chemin.ini dans une #variable que j'aurai pu apeller plus bas dans le commandline. Helas le $PATTERN ne s'affecte pas dans la #variable, le print ne m'affiche que "/chemin.ini" # CommandLine="awk -F \"=\" '$1=="pattern" {print $2}' $PATTERN/chemin.ini| head -n 1" CommandLine="awk -F\"=\" '$1==out {print = $2 }' "$PATTERN"/chemin.ini| head -n 1) #Les deux lignes précédentes donnent le même résultat, que j'utilise l'une ou l'autre. CommandLine | getline toto=$2 print "toto : " toto close(CommandLine) $0=sauvegardeLigne return toto }
Je tiens à préciser que faute de comprendre ce que je faisais, j'ai repris la syntaxe exacte d'une autre fonction présente dans ce script et qui fonctionne :
function trouveCommentaire(numero){ sauvegardeLigne=$0 $0="" CommandLine="awk -F\";\" '$1==" numero " {print $2}' " FICHIER_COMMENTAIRE " | head -n 1" #Avec FICHIER_COMMENTAIRE étant une variable que j'ai définie plus haut qui pointe vers #le fichier que je souhaite lire pour trouver mon commentaire. CommandLine | getline commentaire=$0 close(CommandLine) $0=sauvegardeLigne return commentaire }
Le retour se fait nickel dans ces conditions et j'arrive à récupérer mon commentaire.
Vraiment, la seule différence que je detecte c'est que je n'arrive pas à apeller ma variable $Pattern dans ce script.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
C'est lors de l'appel du script awk global qu'il faut passer ton $PATTERN à awk avec -v
Et ensuite travailler uniquement avec les variables awk dans ton script awk et ne pas mixer les 2
Ne pas confondre les variables de ton shell et celles que awk connait.
awk -v PATTERN=$PATTERN -f desadv_bl.awk < test.tx
et donc il te faut modifier le contenu de ton script awk en conséquence
CommandLine="awk -F\"=\" '$1==out {print = $2 }' "PATTERN"/chemin.ini| head -n 1"
Et ensuite travailler uniquement avec les variables awk dans ton script awk et ne pas mixer les 2
Ne pas confondre les variables de ton shell et celles que awk connait.
awk -v PATTERN=$PATTERN -f desadv_bl.awk < test.tx
et donc il te faut modifier le contenu de ton script awk en conséquence
CommandLine="awk -F\"=\" '$1==out {print = $2 }' "PATTERN"/chemin.ini| head -n 1"
2 avril 2009 à 09:19
Ce qui me déroute dans ce que tu dis, c'est que cette syntaxe fonctionne parfaitement avec d'autres fonctions du script.
A priori ce n'est pas ca qui expliquerait non plus pourquoi je n'arrive pas à affecter ma variable $PATTERN dans une variable awk.
Par acquis de conscience j'ai essayé avec ta syntaxe et elle me ramène l'erreur suivante :
Le problème ne se présente que lorsque je souhaite intégrer une variable d'environnement dans le script awk.