[GAWK] Affectation d'une variable dynamique

Affectation d'une variable dynamique [GAWK] - Shell/Batch - Programmation

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:
Reply

Marsh Posté le 01-10-2002 à 14:32:49   

Reply

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 :

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 ??




 
 
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}'
titi
zfr11opt:/home/operator#
zfr11opt:/home/operator#echo "toto" && \
> echo "toto" | awk '{i="titi"; print i}'
toto
titi
zfr11opt:/home/operator#    
 


 
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.


Message édité par kuroineko le 04-10-2002 à 19:53:07

---------------
[:kuroineko] Francois.P tel: (+33)617230820 http://www.ifrance.com/fpussault  fpussault@caramail.com
Reply

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 :

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}'
titi
zfr11opt:/home/operator#
zfr11opt:/home/operator#echo "toto" && \
> echo "toto" | awk '{i="titi"; print i}'
toto
titi
zfr11opt:/home/operator#    
 


 
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.




 
ou plus proprement :

zfr11opt:/home/operator#echo "toto" | awk '{i="titi"; print i " "$1}'
titi toto
zfr11opt:/home/operator#      


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...


Message édité par kuroineko le 04-10-2002 à 20:49:17

---------------
[:kuroineko] Francois.P tel: (+33)617230820 http://www.ifrance.com/fpussault  fpussault@caramail.com
Reply

Marsh Posté le 04-10-2002 à 21:02:22    

tu ferais mieux d'ecrei des scripts en entier plutot que de filez une ligne de commande


---------------
du bon usage de rand [C] / [C++]
Reply

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.

Reply

Marsh Posté le 05-10-2002 à 10:52:31    

ca evite de se prendre la tete avec les single, double et back quotes


---------------
du bon usage de rand [C] / [C++]
Reply

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
#!/bin/sh
resultat=`echo "toto" | awk '{i="titi"; print i " "$1}' `
echo $resultat
kneko@linux:~> chmod 700 test
kneko@linux:~> ./test
titi toto
kneko@linux:~> rm test
kneko@linux:~>


 
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

  • ` delimiter la commande dont le resultat serra dans la variable  
  • " pour les chaines utilisees dans la commande pour eviter tout problemes
  • et des ' selon les commandes awk '{...}' le necessite par exemple...


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

  • taper tout ton source sans le caractere A
  • avec la syntaxe la plus simple possible
  • avec la pire syntaxe possible
  • ...

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.


Message édité par kuroineko le 05-10-2002 à 11:21:16

---------------
[:kuroineko] Francois.P tel: (+33)617230820 http://www.ifrance.com/fpussault  fpussault@caramail.com
Reply

Marsh Posté le 05-10-2002 à 12:33:20    

je parle d'un script awk, pas sh


---------------
du bon usage de rand [C] / [C++]
Reply

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.


---------------
[:kuroineko] Francois.P tel: (+33)617230820 http://www.ifrance.com/fpussault  fpussault@caramail.com
Reply

Marsh Posté le 05-10-2002 à 16:04:36    

:sarcastic:


---------------
du bon usage de rand [C] / [C++]
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed