I have a script, in which a script snippet is:
x=3
awk '$2=$x{print $1}' infile
The external variable is x
,
but it prompts an error in awk
So in this situation, how to make awk
run successfully?
You pass an external variable for use in awk
with the -v
option:
some_variable=3
awk -v x=$some_variable '$2 == x {print $1}' infile
Also note that you need to change your code from $2=$x
to $2 == x
==
instead =
: the latter is assignment$
inside the awk
script.Aside: You need to specify one -v
for each variable you want to pass in, e.g:
var1=2
var2=4
awk -v x=$var1 -v y=$var2 '$2 == x {print y " " $1}' infile
awk
has a -v
option for this purpose, or as @nevelis mentions, just use double quotes:
awk -v x=3 ' $2==x {print $1} '
GAWK also supports the following syntax:
awk '$2 == x {print $1}' x=3 infile
An interesting usage is:
awk '$2 == x {print $1}' x=3 infile1 x=10 infile2
in this case x
will be equal to 3
for infile1
and equal to 10
for infile2
set -a
x=3
awk '$2==ENVIRON["x"]{print $1}' infile
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With