Shell to awk
Résolu
titexe
Messages postés
55
Date d'inscription
Statut
Membre
Dernière intervention
-
jipicy Messages postés 40842 Date d'inscription Statut Modérateur Dernière intervention -
jipicy Messages postés 40842 Date d'inscription Statut Modérateur Dernière intervention -
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
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:
- Shell to awk
- Classic shell - Télécharger - Personnalisation
- Qwerty to azerty - Guide
- Video to video - Télécharger - Conversion & Codecs
- Majuscule to minuscule - Guide
- Bat to exe converter - Télécharger - Édition & Programmation
6 réponses
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 ?
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 ?
Salut,
awk '/motif/ { print $0 }' fichierCe qui donne pour ton 1er exemple :
awk '/\"\$answerq\"_\"\$answercode\":\"\$answeruser\"/ { print $0 }' fichier;-))
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
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
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 :
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.
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
/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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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.
Merci.
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
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
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 :
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 ;-))
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 ;-)
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 ;-)
awk -f /users2/test/script.awk /users2/test/vfd.cfg