You can use any of the following 3 methods to access shell variables inside an awk script ...
1. Assign the shell variables to awk variables after the body of the script, but before you specfiy the input
awk '{print v1, v2}' v1=$VAR1 v2=$VAR2 input_file
Note: There are a couple of constraints with this method;
- Shell variables assigned using this method are not available in the BEGIN section
- If variables are assigned after a filename, they will not be available when processing that filename ...
e.g.
awk '{print v1, v2}' v1=$VAR1 file1 v2=$VAR2 file2
In this case, v2 is not available to awk when processing file1.
2. Use the -v switch to assign the shell variables to awk variables. This works with nawk, but not with all flavours of awk. On my system (Solaris 2.6) -v cannot be used with /usr/bin/awk but will work with /usr/xpg4/bin/awk.
nawk -v v1=$VAR1 -v v2=$VAR2 '{print v1, v2}' input_file
3. Protect the shell variables from awk by enclosing them with "'" (i.e. double quote - single quote - double quote).
awk '{print "'"$VAR1"'", "'"$VAR2"'"}' input_file
This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
By continuing to use this site, you are consenting to our use of cookies.