Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use a variable in an awk expression

I'm trying to make this command:

sed bla bla filename | awk '{printf "%s %s_entry_%.3f %.3f %.3f %.3f",$1,$3,$4,$5,$6,$7}'

But the thing is, i want the %.3f part to be variable. So in one case it could be %.3f and in another it could be %.3f %.3f %.3f. So i'll just use a static one in my example code for clarity. So if i want 4 of these %.3f and put them in variable $values like so:

values="%.3f %.3f %.3f %.3f"

Then how can I put this string in the awk expression, without making awk to just put literally "${values}" in there. The following is my non-working-attempt:

sed bla bla filename | awk '{printf "%s %s_entry_${values}",$1,$3,$4,$5,$6,$7}'
like image 503
lugte098 Avatar asked Mar 15 '26 08:03

lugte098


2 Answers

you can use -v option of awk to pass in variable from the shell

#!/bin/bash    
awk -v values="${values}" '{gsub("blah","replace");printf "%s %s_entry_"values ....}' file

the gsub() function is to replace what you have with that sed command. So just one awk command will do. sed is redundant in this case (and most other cases where awk is used)

like image 108
ghostdog74 Avatar answered Mar 17 '26 02:03

ghostdog74


Easiest to use actual awk variables:

sed bla bla filename | awk -v values="$values" '{printf "%s %s_entry_"values,$1,$3,$4,$5,$6,$7}'

Or with bash:

awk -v values="$values" '{printf "%s %s_entry_"values,$1,$3,$4,$5,$6,$7}' <(sed bla bla filename)
like image 33
Ignacio Vazquez-Abrams Avatar answered Mar 17 '26 03:03

Ignacio Vazquez-Abrams



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!