Affectation d'une variable dynamique [GAWK] - Shell/Batch - Programmation
Marsh Posté le 04-10-2002 à 19:35:52
slaanesh a écrit a écrit : Question : j'ai un script bash qui me génére une certaine valeur que je voudrais passer après à un script gawk. J'ai lu dans le man de gawk qu'il fallait passer un paramètre dans la ligne de commande du style var=val pour définir dans le script une variable var. donc en gros j'ai fait vite fait un truc du genre :
|
tu peux pas faire comme ca
echo "toto" | awk .... ou gawk.....
c'est sur le echo "toto"
donc tu peux faire
echo "toto"
awk '{..}'
ta variable ne marche pas car $i represente si i est un chiffre un # de colonne dans l'affichage de ce qui sort de la commande avant le |
la seule solution c'est ca :
echo "toto" | gawk '{i="titi"; print i}' |
notes que le echo "toto" est totalement inibe par le awk puisqu'il ne l'analyse meme pas. (normal tu ne le lui demande pas).
zfr11opt:/home/operator#echo "toto" | awk '{i="titi"; print i}' |
alors pourquoi le metre ? si toto ne s'qffiche pas ?
parceque sinon il ne t'affiche titi que sur frappe de validation (enter) et en boucle infinie.
Marsh Posté le 04-10-2002 à 20:48:18
kuroineko a écrit a écrit : tu peux pas faire comme ca echo "toto" | awk .... ou gawk..... c'est sur le echo "toto" donc tu peux faire echo "toto" awk '{..}' ta variable ne marche pas car $i represente si i est un chiffre un # de colonne dans l'affichage de ce qui sort de la commande avant le | la seule solution c'est ca :
|
ou plus proprement :
zfr11opt:/home/operator#echo "toto" | awk '{i="titi"; print i " "$1}' |
echo "toto" | awk '{i="titi"; print i " "$1}'
i="titi"; declarer i et lui attribuer une valeur.
print i afficher la valeur contenue dans i
" "$1 afficher la valeur contenue dans la 1ere colone trouvee affichee par la commande avant le | dans notre exemple echo "toto" donc resultat affiche toto...
le " " c'est juste pour faire un espace pour eviter le tititoto
erreur habituelle...
Marsh Posté le 05-10-2002 à 09:19:19
Taz@PPC a écrit a écrit : tu ferais mieux d'ecrei des scripts en entier plutot que de filez une ligne de commande |
c'est rigoureusement la meme chose en terme de commande.
le reste du script ne lui a pas pose probleme.
d'apres sa demande.
Marsh Posté le 05-10-2002 à 11:14:07
Taz@PPC a écrit a écrit : ca evite de se prendre la tete avec les single, double et back quotes |
c'est justement l'inverse.
la preuve
kneko@linux:~> cat > test |
excuse moi du peu mais il y a bien 2 back-quotes en plus...
dans ce cas tres precis ca ser a rien de definir resultat ok,
mais dans un script vrraiment utile oui.
par exemple mise en forme de tableau un fichier log en en selectionnant que les informations determinantes si tu passe pas par une variable jamais tu vas y arriver et la tu as besoin de
Eviter une syntaxe desagreable a taper c'est bon pour s'amuser mais pas efficace et je suis helas bien place pour en parler a me prendre la tete sur
des scripts VMS,UNIX des OBEY files sur Tandem, et autres batchs DOS, sources C++, perl, gforth etc je garantie que bien souvent des syntaxes tres chiantes sont bien les moins gourmandes en memoire d'une part mais aussi souvent les plus rapides...
A part le cote ludique des jeux comme
et autre amusements du genre que je fais faire a mes "eleves" de temps en temps et que j'ai moi meme fais quand j'etais etudiant, ca n'a aucun interet.
Marsh Posté le 05-10-2002 à 13:24:17
Taz@PPC a écrit a écrit : je parle d'un script awk, pas sh |
desole mais le matin j'ai le cerveau embrouille....surtout le samedi.
Marsh Posté le 01-10-2002 à 14:32:49
Question : j'ai un script bash qui me génére une certaine valeur que je voudrais passer après à un script gawk. J'ai lu dans le man de gawk qu'il fallait passer un paramètre dans la ligne de commande du style var=val pour définir dans le script une variable var.
donc en gros j'ai fait vite fait un truc du genre :
echo "toto" | gawk 'i=test' '{print $i}'
et j'obtiens ca en retour :
gawk: cmd. line:2: fatal: cannot open file `{print $i}' for reading (No such file or directory)
so ??? c'est koa le problème ??
Message édité par slaanesh le 01-10-2002 à 14:34:40
---------------
Ne remets pas à demain ce que tu peux faire après-demain ! :sol: