linux - How do I use shell variables in an awk script? -
i found ways pass external shell variables awk script, i'm confused ' , ".
first, tried shell script:
$ v=123test $ echo $v 123test $ echo "$v" 123test then tried awk:
$ awk 'begin{print "'$v'"}' $ 123test $ awk 'begin{print '"$v"'}' $ 123 why difference?
lastly tried this:
$ awk 'begin{print " '$v' "}' $ 123test $ awk 'begin{print ' "$v" '}' awk: cmd. line:1: begin{print awk: cmd. line:1: ^ unexpected newline or end of string i'm confused this.
getting shell variables awk may done in several ways. better others.
this best way it. uses -v option: (p.s. use space after -v or less portable. e.g., awk -v var= not awk -vvar)
variable="line one\nline two" awk -v var="$variable" 'begin {print var}' line 1 line 2 this should compatible awk , variable available in begin block well:
you can use variable within awk code, it's messy , hard read, , charles duffy points out, version may victim of code injection. if adds bad stuff variable, executed part of awk code, not use.
variable="line one\nline two" awk 'begin {print "'"$variable"'"}' line 1 line 2 here example of code injection:
variable='line one\nline two" ; (i=1;i<=1000;++i) print i"' awk 'begin {print "'"$variable"'"}' line 1 line 2 1 2 3 . . 1000 you can add lots of commands awk way. make crash non valid commands.
here variable after awk code. work fine long not need variable in begin block:
variable="line one\nline two" echo "input data" | awk '{print var}' var="$variable" or awk '{print var}' var="$variable" file variable can added awk using here string
awk '{print $0}' <<< "$variable" test this same as:
echo "$variable" | awk '{print $0}' it's double quote variable "$variable"
if not, multiple lines added long single line.
example:
var="line 1 line two" echo $var line 1 line 2 echo "$var" line 1 line 2 other errors can without double quote:
variable="line one\nline two" awk -v var=$variable 'begin {print var}' awk: cmd. line:1: one\nline awk: cmd. line:1: ^ backslash not last character on line awk: cmd. line:1: one\nline awk: cmd. line:1: ^ syntax error and single quote, not expand value of variable:
awk -v var='$variable' 'begin {print var}' $variable
Comments
Post a Comment