awk -v input="$constrained" '
BEGIN {
n = split(toupper(input), user)
fmt = "%-4s %-8s NNN 0.050 0.050 0.050\n"
}
{print}
/<< matched line >>/ {
for (i=1; i<=n; i++)
printf fmt, user[i], user[i]"_GPS"
exit
}
' ./text_data > text_data_2
在上面的代码中,我想定义变量0.050 0.050 0.050
。我尝试使用
echo -n "##### numeric value? ####?"
read value
fmt = "%-4s %-8s NNN $value $value $value\n"
但在引号内,$value
无法定义变量。我如何在引号内定义这个变量?
答案1
您应该能够使用与传递变量-v
相同的方式传递变量input
awk -v input="$constrained" -v value="0.05"
然后在块sprintf
内使用它BEGIN
来构造格式字符串,例如
BEGIN {
n = split(toupper(input), user);
fmt = sprintf("%%-4s %%-8s NNN %-4.3f %-4.3f %-4.3f\n", value, value, value, value);
}
注意在字符串中%%
生成文字的用法。%
fmt
为了测试它是否构造了正确的格式字符串,我们可以添加打印语句,首先是fmt
字符串本身,然后是生成的打印语句:
$ awk -v value="0.05" '
BEGIN{
fmt = sprintf("%%-4s %%-8s NNN %-4.3f %-4.3f %-4.3f\n", value, value, value, value);
print fmt;
printf(fmt, "test", "testval");
}'
%-4s %-8s NNN 0.050 0.050 0.050
test testval NNN 0.050 0.050 0.050