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