Passer des paramètres à un script awk fichier
Si je veux passer un paramètre à un script awk fichier, comment puis-je le faire ?
#!/usr/bin/awk -f
{print $1}
Ici je veux imprimer le premier argument passé au script à partir de la coquille, comme:
bash-prompt> echo "test" | ./myawkscript.awk hello
bash-prompt> hello
- comlete awk tutotial disponible
Vous devez vous connecter pour publier un commentaire.
votre hash bang définit le script n'est pas un script shell, il est un script awk. vous ne pouvez pas le faire en bash sein de votre script.
aussi, ce que vous avez fait :
echo blah|awk ...
est pas passant paramenter, il transfère la sortie de la commande echo pour une autre commande.vous pouvez essayer ces dessous:
ou
avec cela, vous avez var
a
dans votre foo.awk, vous pouvez l'utiliser.si vous voulez faire quelque chose comme shell script accepter $1 $2 vars, vous pouvez écrire un petit shell script pour envelopper votre awk choses.
MODIFIER
Non, je n'ai pas mal vous comprendre.
prenons l'exemple:
disons, votre
x.awk
a:si vous n' :
c'est même comme:
ici l'entrée pour awk est seulement
file
, votre echo foo n'a pas de sens. si vous n':awk prend les deux signaux d'entrée (arguments pour awk) est stdin est un fichier, dans votre script awk, vous pouvez:
cela permettra d'imprimer d'abord
foo
de votre écho, puis la colonne1 defile
bien entendu, cet exemple ne fait rien réelle de travail, il suffit d'imprimer tous.bien sûr, vous pouvez avoir plus de deux entrées, et ne cochez pas la NR et FNR, vous pouvez utiliser le
par exemple :
alors votre "foo" est le 2ème arg, vous pouvez l'obtenir dans votre x.awk par
ARGV[2]
maintenant, il est ARGV[4] affaire.
Je veux dire, votre
echo "foo"|..
serait stdin pour awk, il pourrait par la 1ère ou à la n-ième "argument"/entrée pour awk. dépend de l'endroit où vous mettez le-
(stdin). Vous avez à gérer dans votre script awk.echo foo|./x.awk file
pour imprimerfoo
tout d'abord, neecho foo|./x.awk - file
awk {print 1}
. Signifie queawk
toujours besoinawk <commands> file
ousomething | awk <commands>
?awk 'BEGIN{print "kent"}'
BEGIN
bloc, sinon elle s'attend à une certaine stdin. Que fait ma journée (awklly de parler :D). Merci, @Kent!Dans
awk
$1
références le premier champ dans un enregistrement n'est pas le premier argument comme il le fait dansbash
. Vous avez besoin d'utiliserARGV
pour cela, découvrez ici pour officiel parole.Script:
Démo:
Vous pouvez utiliser
-v
comme un option de ligne de commande de fournir une variable dans le script:Dire que nous avons un fichier script.awk comme ceci:
On lance comme ça:
cat file | script.awk -v my_var="hello this is you"