Posez votre question Signaler

Shell to awk [Résolu]

titexe 54Messages postés 27 novembre 2006Date d'inscription - Dernière réponse le 6 avril 2007 à 13:57
Bonjour,
J’ai un script shell qui fait un control d'une ligne avec un grep et après la commande écho si le contrôle est OK.
Je veux créer le même script en awk , mais je sais pas comment faire .?
Détail du script shell :
#!/bin/ksh
grep ""$answerq"_"$answercode":"$answeruser"" /users2/test/HAB_PART.txt 1>/dev/null
rc=$?
if [ "$rc" != "0" ]
then
echo ""$answerq"_"$answercode":"$answeruser"" >> /users2/test/HAB_PART.txt
else
echo ""$answerq"_"$answercode":"$answeruser" at HAB_PART.txt Already exists"
fi
grep "$answeruser:$answerprot" /users2/test/HAB_PROT.txt 1>/dev/null
rc=$?
if [ "$rc" != "0" ]
then
echo "$answeruser:$answerprot" >> /users2/test/PROT.txt
else
echo "$answeruser:$answerprot at HAB_PROT.cfg Already exists"
fi
Merci de m'aider a créer ce script awk,
Merci d'avance,
Cordialement,
Abdel
Lire la suite 

Shell to awk »

12 réponses
Réponse
+1
moins plus
Entendons-nous bien...
Les "$1, $2, $3" correspondent à quoi ? Des variables, des paramètres positionnels ou des champs ?

Ils sont issus d'un "shell "ou de "awk" lui-même ?
titexe - 5 avril 2007 à 17:57
c'est des variables que le script awk récupere du fichier vfd.cfg et qui sont séparé par "," ( FS="[,]" ) en exécutant la commande :

awk -f /users2/test/script.awk /users2/test/vfd.cfg
Ajouter un commentaire
Réponse
+0
moins plus
Merci de m'aider a résoudre ce probléme , c est trés critique !!!

Merci d'avance
Ajouter un commentaire
Réponse
+0
moins plus
Salut,
awk '/motif/ { print $0 }' fichier
Ce qui donne pour ton 1er exemple :
awk '/\"\$answerq\"_\"\$answercode\":\"\$answeruser\"/ { print $0 }' fichier
;-))
titexe - 5 avril 2007 à 15:21
bonjour,

Merci pour votre réponse,

est ce que je peux insérer cette commande au sein de mon script.awk , parceque j'ai déja ce script , je veux juste insérer cette partie :

je l'ai déja fait , mais il m'affiche un message d'erreur :

if ($1 == "OB")
{

awk '/\"\$1\"_\"\$2\":\"\$3\"/ { print $0 }' /users2/test/" $7 ".cfg
if ($0 == "0")
{
system("echo " $1 "_" $2 ":" $3 " >> /users2/pfe/Gateway_DR/user_cfg/" $7 ".cfg ")
}
else
{
print " existant "
}
}

ce script.awk je le lance de cette maniére :

awk -f /users2/test/script.awk /users2/test/vfd.cfg

Merci d'avance et merci pour votre réactivité ,

Cdlt,

Abdel
Ajouter un commentaire
Réponse
+0
moins plus
Re-

Ton problème là c'est le fait d'utiliser des variables (ou paramètres) externes (shell) à awk. Dans ce cas, il faut utiliser la syntaxe suivante :
 awk '/\"\'$1'\"_\"\'$2'\":\"\'$3'\"/ { print $0 }' 
Il faut en fait exclure la(es) variable(s) de la commande awk. La commande awk étant délimitée par des quotes, il suffit de refermer cette commande avant la variable et de la rouvrir derrière.
titexe - 5 avril 2007 à 17:46
j'ai apporté les modifications que vous m'avez demandé, mais malgré ca , il m'affiche des messages d'erreurs en éxcecutant le script :

/users2/test > sh VFD1.sh
syntax error The source line is 76.
The error context is
awk >>> ' <<< /\"\'$1'\"_\"\'$2'\":\"\'$3'\"/ { print $0 }' /users2/test/" $7 ".cfg
awk: The statement cannot be correctly parsed.
The source line is 76.
syntax error The source line is 80.

le contenu du VFD1.sh :

awk -f /users2/pfe/vfd1.awk /users2/pfe/vfd.cfg

je pense la probléme est du au fait que j 'ai inséré une commande awk dans un script awk !!!

Merci encore une fois,

Cdlt,

Abdel
Ajouter un commentaire
Réponse
+0
moins plus
Tu peux poster un bout de ton fichier où tu dois récupérer les champs et me dire exactement ce que tu veux, parce que là j'ai l'impression qu'on pédale dans la choucroute entre shell, awk et je sais plus quoi encore ;-))

Merci.
titexe - 5 avril 2007 à 18:50
j'exécute le premier script shell VFD1.sh,

le soucis que j'avais , c'est que a l'interrieur du script awk , y'a la commande echo qui insére une ligne dans un fichier,

ce que je voudrais faire , c'est de controler est ce que cette ligne existe déja dans ce fichier sioui ne rien faire , sinon je rajoute cette ligne !!

le lien pour le script VFD1.sh ( http://cjoint.com/?efsTUnCEzN )
le lien pour le script vfd.cfg ( http://cjoint.com/?efsUTLmmJV )
le lien pour le script vfd1.awk ( http://cjoint.com/?efsVANiEkg )

Voila j'espere que mon probléme est bien eclairci maintenant,

je compte beaucoup sur votre aide,

Cdlt,

Abdel
Ajouter un commentaire
Réponse
+0
moins plus
Ok merci.

Mais avec tout ça j'ai encore des incertitudes !!!

1- Le fichier "vfd.cfg" c'est tout ce qu'il contient ? 1 ligne et 7 champs ?

2- Les paramètres "$1-$2-$3" de la fameuse ligne "awk '/\"\'$1'\"_\"\'$2'\":\"\'$3'\"/ { print $0 }' etc..." c'est les mêmes que dans le reste du script, comme "if ($1 == "OR")" ???

3- Où ils représentent les champs du fichier "user_cfg" ? (il me faufrait le fichier aussi, ou su moins quelques lignes pour voir à quoi ça ressemble)
Parce que dans ce cas là, la syntaxe serait plutôt du genre :
awk -F"_" '$1 == "foo" && $2 == "bar" && $3 == "foobar" { print $0 }'
A adapter bien sur ;-))
titexe - 6 avril 2007 à 11:42
Bonjour,

merci pour ton implication dans mon probléme , et merci pour votre réactivité,

1- le fichier vfd.cfg il contient 1 seule ligne avec 7 champs et il peut y'aller jusqu'a 14 champs,

2- les paramétres $1 , $2, $3 sont les memes paramétres partout dans le script,

3- voila le lien d'un des fichiers qui sont dans le répertoire user_cfg, ( http://cjoint.com/?eglQdupdXr )

Merci encore une fois,

Cdlt,

Abdel ;-)
jipicy - 6 avril 2007 à 13:57
Re-

Bon ben je suis désolé, mais j'ai beau trituré le problème dans tous les sens, je n'arrive pas à incorporer cette simulation de "grep" dans ton fichier "awk" ;-(

Sorry...
Ajouter un commentaire
Ce document intitulé « shell to 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
5 extensions si vous voulez revenir à l'ancien Facebook