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

Popular posts from this blog

How to provide Authorization & Authentication using Asp.net, C#? -

toolbar - How to add link to user registration inside toobar in admin joomla 3 custom component -

How to use Authorization & Authentication in Asp.net, C#? -