Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1669 connectés 

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

awk et variable

n°1010577
tabasko
Posté le 12-02-2008 à 18:00:32  profilanswer
 

Bonjour,  
 
J'ai un script dans lequel je place une commande pour me rajouter un mot en première position de chaque ligne.  
La commande que j'utilise est  de type  awk '{print TOTO $0}' monfichier.txt  
 
Le problème c'est que le mot que je souhaite rajouter change , je l'ai donc stocké dans une variage que j'ai appelé $i.  
 
Si je fais : awk '{print $i $0}' monfichier.txt    le $i n'est pas interprété correctement.  
 
J'ai essayé de passer par une commande "echo" pour m'en sortir mais là encore sans succès  
 
 
awk '{print 'echo $i' $0}' monfichier.txt  
awk '{print `echo $i` $0}' monfichier.txt  
awk '{print echo $i $0}' monfichier.txt  
 
La dernière commande echo $i ne me fait pas d'erreur, mais me sort la même chose que si j'avais tapé awk '{print $0 $0}' ... et bien évidemment $i n'a pas une valeur nulle ...  
(Autre précision, une ligne plus bas, toujours dans ma boucle l'appel un echo "$i Traité OK" et la valeur apparait bien, donc j'écarte l'hypothèse d'un glissement de variage).  
 
 
Marche pas.  
 
Merci .


Message édité par tabasko le 12-02-2008 à 18:04:37
mood
Publicité
Posté le 12-02-2008 à 18:00:32  profilanswer
 

n°1010579
neriki
oenologue
Posté le 12-02-2008 à 18:11:13  profilanswer
 

Je suppose que $i est initialisé dans ton shell et non dans ton programme awk...
 
Il faut donc initialiser une autre variable i dans ton programme awk:
 
awk  '{print i $0}'  i=$i  monfichier.txt


---------------
C'est pas bon, Neriki, tu recommences à glander, là. :o
n°1010580
Mjules
Modérateur
Parle dans le vide
Posté le 12-02-2008 à 18:11:30  profilanswer
 

avec sed ça donnerait un truc comme ça
sed -e 's|^|'$toto' |g' lapin.txt >carotte.txt


---------------
Celui qui pose une question est idiot 5 minutes. Celui qui n'en pose pas le reste toute sa vie. |  Membre du grand complot pharmaceutico-médico-scientifico-judéo-maçonnique.
n°1010708
tabasko
Posté le 13-02-2008 à 09:46:43  profilanswer
 

neriki a écrit :

Je suppose que $i est initialisé dans ton shell et non dans ton programme awk...
 
Il faut donc initialiser une autre variable i dans ton programme awk:
 
awk  '{print i $0}'  i=$i  monfichier.txt


 
Ca fonctionne !!! Merci pour vos différentes solutions ... je conserve celle ci dessus qui est de la synatxe la plus simple et proche de ce que je faisais.
Merci pour la combine sed je la note je pourrai bien m'en resservir :)
 
Mr Harry, $i étant une variable dans une boucle je ne peux lui appliquer sa valeur dans mon script  :heink:  
 
a+


Message édité par tabasko le 14-02-2008 à 09:44:16
n°1011196
tabasko
Posté le 14-02-2008 à 14:33:30  profilanswer
 

Je tente aujourd'hui de faire quelques choses de similaire et je rebloque à nouveau :
 
 
rm monfichier.txt
 
for i in `cat liste.tel`
do
 
awk '$5 ~ /tel/'   tel=$i fichier.txt >> resultat.txt
 
done
 
 
Je cherche à extraire du fichier "ficher.txt" toutes les lignes qui contienne en colonne 5 le numéro de tel qui apparait dans la boucle (du fichier liste.tel). Je n'arrive pas à lui forcer l'usage de la valeur de variable.
 
 
 
Marche pas ....
 
Je souhaite faire simple et rester le plus proche possible de cette ligne de commande.
Merci

Message cité 1 fois
Message édité par tabasko le 14-02-2008 à 14:34:59
n°1011207
franceso
Posté le 14-02-2008 à 14:55:20  profilanswer
 

tabasko a écrit :

Je tente aujourd'hui de faire quelques choses de similaire et je rebloque à nouveau :
 
 
rm monfichier.txt
 
for i in `cat liste.tel`
do
 
awk '$5 ~ /tel/'   tel=$i fichier.txt >> resultat.txt
 
done
 
 
Je cherche à extraire du fichier "ficher.txt" toutes les lignes qui contienne en colonne 5 le numéro de tel qui apparait dans la boucle (du fichier liste.tel). Je n'arrive pas à lui forcer l'usage de la valeur de variable.
 
 
 
Marche pas ....
 
Je souhaite faire simple et rester le plus proche possible de cette ligne de commande.
Merci

un truc comme ça devrait marcher, je pense :

for i in `cat liste.tel`
do
  awk "\$5 ~ /$i/" fichier.txt >> resultat.txt
done


---------------
TriScale innov
n°1011209
tabasko
Posté le 14-02-2008 à 14:57:11  profilanswer
 

PARFAIT ! Merci francesco cela fonctionne ...

n°1011222
tabasko
Posté le 14-02-2008 à 15:56:36  profilanswer
 

Bon ca se complique (comme toujours lol).
 
Le morceau de script pour lequel vous m'avez aidé fonctionne , ce n'est plus le problème.
 
Le problème c'est que $i que je cherche et extrait de mon fichier source, à une taille (nombre de caractère) qui est variable.
Je cherche à faire des associations strictes. Dans l'état, ma commande extrait la ligne si le champs en question contient la valeur $i.
 
Je sais pas si je m'explique clairement :
 
Mettons que ma variable dans sa boucle prend la valeur de 1234.
Le fichier source que je consulte en colonne4 pour faire mon extract, doit posséder cette valeur très exactement "1234".
Actuellement si mon script rencontre en colonne4 9991234999 il va tout de même extraire la ligne (alors je que je ne le souhaite pas).
 
Attention ce qui vient rendre plus complexe la situation, c'est que le nombre de chiffre de $i peut varier.
 
Je ne connais pas la syntaxe pour demande à AWK de prendre la scricte valeur (et non plus tout ce qui contient et/ou est la variable en elle même).
 
Merci pour ceux qui prennent le temps de comprendre :) et de répondre ...


Message édité par tabasko le 14-02-2008 à 15:59:19
n°1011226
tabasko
Posté le 14-02-2008 à 16:05:53  profilanswer
 

Je viens à tout hasard essayer ceci ....
 

Citation :

for i in `cat liste.tel`  
do  
  awk "\$5 == $i " fichier.txt >> resultat.txt  
done


 
ceci semble fonctionner :)

n°1011261
matafan
Posté le 14-02-2008 à 17:51:46  profilanswer
 

Oui ça fonctione, mais la solution qui consiste à passer la variable à awk (avec awk '...' i=$i ou awk -v i=$i '...') est infiniment meilleure.

mood
Publicité
Posté le 14-02-2008 à 17:51:46  profilanswer
 

n°1011403
franceso
Posté le 15-02-2008 à 09:14:12  profilanswer
 

matafan a écrit :

Oui ça fonctione, mais la solution qui consiste à passer la variable à awk (avec awk '...' i=$i ou awk -v i=$i '...') est infiniment meilleure.

Pourquoi ?


---------------
TriScale innov
n°1011409
matafan
Posté le 15-02-2008 à 09:36:10  profilanswer
 

Parce que faire générer le script awk par le shell, c'est crade. En plus d'être illisible si ton script fait plus que quelques lignes.

n°1011425
franceso
Posté le 15-02-2008 à 10:11:42  profilanswer
 

:jap:


---------------
TriScale innov

Aller à :
Ajouter une réponse
 

Sujets relatifs
Pb avec le symbole * dans une variable (liste le repertoire)[ksh] Recuperer une variable avec un \ dedans
Je cherche un nom de variable !shell, tester le contenu d'une variable
expression reguliere, awk et variable[snmp/cacti] type de variable renvoyé par une oid
script zsh avec utilisation de awk, passage de variable[Noob] Ajouter avec un script une variable d'env
remplacement variable script bashBash] Boucle while - export variable
Plus de sujets relatifs à : awk et variable


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR