awk et variable - Codes et scripts - Linux et OS Alternatifs
Marsh Posté le 12-02-2008 à 18:11:13
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
Marsh Posté le 12-02-2008 à 18:11:30
avec sed ça donnerait un truc comme ça
sed -e 's|^|'$toto' |g' lapin.txt >carotte.txt
Marsh Posté le 13-02-2008 à 09:46:43
neriki a écrit : Je suppose que $i est initialisé dans ton shell et non dans ton programme awk... |
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
a+
Marsh Posté le 14-02-2008 à 14:33:30
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
Marsh Posté le 14-02-2008 à 14:55:20
tabasko a écrit : Je tente aujourd'hui de faire quelques choses de similaire et je rebloque à nouveau : |
un truc comme ça devrait marcher, je pense :
for i in `cat liste.tel` |
Marsh Posté le 14-02-2008 à 15:56:36
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 ...
Marsh Posté le 14-02-2008 à 16:05:53
Je viens à tout hasard essayer ceci ....
Citation : for i in `cat liste.tel` |
ceci semble fonctionner
Marsh Posté le 14-02-2008 à 17:51:46
Oui ça fonctione, mais la solution qui consiste à passer la variable à awk (avec awk '...' i=$i ou awk -v i=$i '...') est infiniment meilleure.
Marsh Posté le 15-02-2008 à 09:14:12
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 ?
Marsh Posté le 15-02-2008 à 09:36:10
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.
Marsh Posté le 12-02-2008 à 18:00:32
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