Shell to awk

Résolu/Fermé
titexe Messages postés 55 Date d'inscription lundi 27 novembre 2006 Statut Membre Dernière intervention 16 août 2010 - 4 avril 2007 à 13:18
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 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
A voir également:

6 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
5 avril 2007 à 17:53
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 ?
1
titexe Messages postés 55 Date d'inscription lundi 27 novembre 2006 Statut Membre Dernière intervention 16 août 2010 1
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
0
titexe Messages postés 55 Date d'inscription lundi 27 novembre 2006 Statut Membre Dernière intervention 16 août 2010 1
4 avril 2007 à 17:34
Merci de m'aider a résoudre ce probléme , c est trés critique !!!

Merci d'avance
0
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
5 avril 2007 à 14:29
Salut,
awk '/motif/ { print $0 }' fichier
Ce qui donne pour ton 1er exemple :
awk '/\"\$answerq\"_\"\$answercode\":\"\$answeruser\"/ { print $0 }' fichier
;-))
0
titexe Messages postés 55 Date d'inscription lundi 27 novembre 2006 Statut Membre Dernière intervention 16 août 2010 1
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
0
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
5 avril 2007 à 15:42
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.
0
titexe Messages postés 55 Date d'inscription lundi 27 novembre 2006 Statut Membre Dernière intervention 16 août 2010 1
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
5 avril 2007 à 18:29
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.
0
titexe Messages postés 55 Date d'inscription lundi 27 novembre 2006 Statut Membre Dernière intervention 16 août 2010 1
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 ( https://www.cjoint.com/?efsTUnCEzN )
le lien pour le script vfd.cfg ( https://www.cjoint.com/?efsUTLmmJV )
le lien pour le script vfd1.awk ( https://www.cjoint.com/?efsVANiEkg )

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

je compte beaucoup sur votre aide,

Cdlt,

Abdel
0
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
5 avril 2007 à 20:28
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 ;-))
0
titexe Messages postés 55 Date d'inscription lundi 27 novembre 2006 Statut Membre Dernière intervention 16 août 2010 1
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, ( https://www.cjoint.com/?eglQdupdXr )

Merci encore une fois,

Cdlt,

Abdel ;-)
0
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 > titexe Messages postés 55 Date d'inscription lundi 27 novembre 2006 Statut Membre Dernière intervention 16 août 2010
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...
0