Hello, I've been trying to figure out how to use variables inside the AWK command and use it back in the korn shell sript.
in my script I have lots of awk commands like this
grep Listen /etc/ssh/sshd_config | \
awk '{ if ($2 == "22" ) print "OK";
else print "not OK"
}'
I need to add a counter to count how many issues/problems I have, something like
x=0
grep Listen /etc/ssh/sshd_config | \
awk '{ if ($2 == "22" )
print "OK";
else
print "not OK"
x++
}'
# ... more of awk commands ...
echo x;
unfortunatelly x "inside" the awk command is different/local to awk command ... is there a way to do thi/
Thank you,
K.
Hi,
you can pass variables to awk via the "-v"-option. See "man awk".
awk -v x=$x '{print x }' file
To use the awk output in a shell-variable something like:
x=$(awk ... )
works.
HTH Chris
Chris,
awk -v x=$x ... works great and I'm able to pass the value into awk, now I just need to export it back to the script ...
I can't use
x=$(awk ... ) 'cause my command uses also print command and the counter, is there a way how to export the variable from within the AWK command?
thank you,
K.
The simple answer is no. The awk script is running as a subshell and there's no way to make a child process alter the environment of its parent.
Having said that, the awk process can create a file (say, /tmp/awk.env) with the content
where <x> is the new value. In your parent script, you then source the env file i.e.
NOTE: By having the "export" in env file, it's not necessary to pass $X into the next awk call as it's now available in the parent's environment.
HTH
Jerry