Commande bash awk, comment mettre en variables.
Résolu
Jeremyprog
-
Jeremyprog -
Jeremyprog -
Bonjour,
J'ai un petit souci sûrement tout bête mais je n'arrive pas à le régler.
J'ai fais un petit script en
Ça fonctionne très bien mais je voudrais remplacer
... mais cela ne fonctionne pas, j'ai lu toute la doc sur
Si quelqu'un a un piste, ça serait super gentil :)
Merci de prendre du temps pour moi:)
J'ai un petit souci sûrement tout bête mais je n'arrive pas à le régler.
J'ai fais un petit script en
bashavec la commande
awk.
awk '$0=$0"lulu"'
Ça fonctionne très bien mais je voudrais remplacer
"lulu"par une variable du genre
var ="toto" awk '$0=$0''#var'
... mais cela ne fonctionne pas, j'ai lu toute la doc sur
awket j'ai du rater un truc je n'arrive pas à trouver
Si quelqu'un a un piste, ça serait super gentil :)
Merci de prendre du temps pour moi:)
2 réponses
-
Bonjour,
Pour déclarer une variable en shell, il ne faut pas mettre d'espace autour de l'opérateur=
:
var="toto" echo $var # Affiche toto
En général, pour injecter le contenu d'une variable shell dans une commande shell, tu peux utiliser l'opérateur${var}(en abrégé$var
). Mais ici, c'est plus compliqué, car en fait on veut injecter une variable shell dans un code awk et du coup$
n'a pas le même sens partout. On pourrait éventuellement s'en sortir avec deseval
et en échappant les$
mais ce serait assez illisible et pénible à écrire.
Heureusement,awk
permet de récupérer facilement une variable shell et de l'injecter dans les instructions passées àawk
, comme le montre cet exemple :
var="/webroot" echo | awk -v r=$root '{ print "shell variable $root value is " r}'
Après, je ne connais pas le contexte de ta question, mais si le but est juste de concaténer une saisie avec une chaîne, je ne vois pas trop l'utilité deawk
. Tu peux directement écrire un petit script shell :
toto.sh
#!/bin/bash read saisie echo $1$saisie
Exécution :
(mando@silk) (~) $ chmod a+x toto.sh
(mando@silk) (~) $ ./toto.sh toto
tata
tototata
Bonne chance-
Merci pour ta réponse rapide et très complète.
J'ai un fichierfichier.txt
contenant :ab
cd
ef
gh
Quand je mets la commande :awk '$0=$0"lulu"' /chemin/fichier.txt
J'obtiens :ablulu
bclulu
eflulu
C'est ce que je voulais, mais à la place delulu
je veux mettre une variable. Donc je mets :
var=`sed -n '1p' /chemin/fichier2.txt`
(La première ligne dufichier2.txt
est bien stocké dans la variablevar
).
Maisawk '$0=$0$variable/chemin/fichier.txt
cela ne fonctionne pas, j'ai essayé avec plusieurs syntaxe mais ça bloque la variable n'est pas lu comme une variable :(
-
-
hello
$ var="lulu"
$ awk -v x="$var" '$0=$0 x' fichier.txt
ablulu
cdlulu
eflulu
ghlulu
$ var="lolo"
$ awk -v x="$var" '$0=$0 x' fichier.txt
ablolo
cdlolo
eflolo
ghlolo
$