variable dans awk

variable dans awk - Shell/Batch - Programmation

Marsh Posté le 19-07-2004 à 16:50:36    


Comment faire pour que awk reconnaisse cette variable car dans le cas présent, l'affichage de nomfic ne s'effectue pas  :whistle:  
 
 
nomfic=`basename $ligne`nomchemin=`dirname $ligne`
awk '  
BEGIN {flag=1;cpt=0}  
 
$0 ~ /\/\*/ && $0 !~ /\*\// {  
 flag = 0  
}  
$0 ~ /\*\// && $0 !~ /\/\*/ {  
 flag = 1  
 next  
}  
$0 !~ /^[ \t]*\/\*.*\*\/[ \t]*$/ && $0 !~ /^\/\*.*\*\/$/ && $0 !~ /^.*\/\// && $0 !~ /^;/ &&  $1 !~ /^\@\"/ && $0 !~ /^[ \t]*$/ && flag != 0 {  
 print $0 > "./resultat.txt"
 cpt++  
}  
END {print $nomfic cpt}' $ligne
 
Merci  ;)  
 

Reply

Marsh Posté le 19-07-2004 à 16:50:36   

Reply

Marsh Posté le 19-07-2004 à 17:05:53    

Je pense qu'il faut que tu le passes en paramètre au AWK déjà, puis tu peux récupérer sa valeur (donc le nom du fichier) dans la variable ARGV, qui est un tableau dont les indices vont de 0 à ARGC-1.
 
Parceque là j'ai pas trop regardé le code du awk mais si tu lui passes pas de fichier en paramètre je vois mal ce qu'il peut faire? (les $0 concernant la ligne courante du fichier traité).

Reply

Marsh Posté le 19-07-2004 à 17:06:31    

Je viens de voir que la variable FILENAME contient aussi le nom du fichier passé en paramètre.

Reply

Marsh Posté le 19-07-2004 à 17:47:12    

En effet avec la variable FILENAME je recupère bien le fichier mais cela ne me convient pas en fait je voudrait recuperer le chemin complet où je vais chercher mon fichier
 
En affectant PWD a une variable, puis en passant cette variable dans le awk cela devrait marcher mais je ne sais pas utiliser ARGV
 
Pilou51 tu sais toi ??

Reply

Marsh Posté le 20-07-2004 à 03:09:51    

awk -v nomfic=$nomfic ' ... '

Reply

Marsh Posté le 20-07-2004 à 16:00:52    

Est-il possible d'inclure une variable dans une commande sed comme celle qui suit ??
 
sed 's/\./$toto/' $fic

Reply

Marsh Posté le 21-07-2004 à 04:02:10    

Tu peux toujours utiliser les double quotes, auquel cas $toto sera evalué avant même d'être passé à sed.

Reply

Marsh Posté le 21-07-2004 à 09:37:47    

il ya plus simple, il suffit de fermer et de réouvrir les quotes dans awk :

$TOTO="hop"; awk 'BEGIN { print "'$TOTO'"; };'
hop


Message édité par bobuse le 21-07-2004 à 09:38:00
Reply

Marsh Posté le 21-07-2004 à 11:38:10    

Merci pour vos réponse mais je comprend pas pourquoi y'a pas moyen de passer une variable dans sed  
 
toto=`PWD`
 
sed 's/\./"$toto"/' < $fic1 > $fic2
 
j'ai essayé tout un tas de truc les quote simple double ect...mais rien a faire  
 
-:(

Reply

Marsh Posté le 21-07-2004 à 11:39:31    

même chose :

TOTO="hop"; echo hiphophip | sed -e 's/'$TOTO'/hip/'


Message édité par bobuse le 21-07-2004 à 11:40:27
Reply

Marsh Posté le 21-07-2004 à 11:39:31   

Reply

Marsh Posté le 21-07-2004 à 11:46:42    

bobuse,  
 
voila ce que j'obtient avec ce code  
 
toto=`PWD`
 
sed 's/\./'$toto'/' < $fic > ./lisMod.txt
 
 
 
toto=L:/DRAD_DSW/Ds2m/Ds2mA100
+ sed s/\./L:/DRAD_DSW/Ds2m/Ds2mA100/
sed: garbage after command

Reply

Marsh Posté le 21-07-2004 à 12:07:48    

sed -e ;)

Reply

Marsh Posté le 21-07-2004 à 13:48:23    

sed -e donne le même resultat  
 
+ + PWD
toto=L:/DRAD_DSW/Ds2m/Ds2mA100
+ sed -e s/\./L:/DRAD_DSW/Ds2m/Ds2mA100/
sed: garbage after command
+ exit

Reply

Marsh Posté le 21-07-2004 à 15:55:31    

et essaie juste ma commande :

TOTO="hop"; echo hiphophip | sed -e 's/'$TOTO'/hip/'

Reply

Marsh Posté le 23-07-2004 à 03:43:17    

Dans ce cas tu peux carrément virer les quotes, elles ne servent à rien.


Message édité par matafan le 23-07-2004 à 03:43:52
Reply

Sujets relatifs:

Leave a Replay

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