使用引号内的变量

使用引号内的变量
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

相关内容