如何在awk中将参数传递到printf?

如何在awk中将参数传递到printf?,awk,arguments,Awk,Arguments,format.awk很简单 #! /usr/bin/awk { printf("%52s\\\n" ,$0); } 命令即将执行 awk -f format.awk test 现在我想在printf(“%52s\\n”$0)中设置数字52作为变量 awk -f format.awk -v n=52 如果我想将参数52转换为.awk格式,那么如何编写语句 printf("%ns\\\n" ,$0); awk -f format.awk -v n=52 test awk:运行时

format.awk很简单

#! /usr/bin/awk
{
    printf("%52s\\\n" ,$0);
}
命令即将执行

awk -f format.awk   test
现在我想在printf(“%52s\\n”$0)中设置数字52作为变量

awk -f format.awk -v n=52
如果我想将参数52转换为.awk格式,那么如何编写语句

printf("%ns\\\n" ,$0);
awk -f format.awk  -v n=52 test
awk:运行时错误:printf(“%-ns”)中的转换(数字1)不正确\ ”)

FILENAME=“test”FNR=2 NR=2在
awk
中,字符串插值不是这样工作的。你需要说

printf("%" n "s", $0)

是的,您可以看到以下示例:

kent$  awk 'BEGIN{a=3;printf "%.*f\n",a,10/3}'           
3.333  
           
kent$  awk 'BEGIN{a=7;printf "%.*f\n",a,10/3}'    
3.3333333
语法与C的
printf()
相同,带有
*


编辑(添加单据报价) C库printf的动态宽度和prec功能(例如。, 支持“%*.*s”)。而不是提供明确的宽度和/或prec 格式字符串中的值,它们将在参数列表中传递

引用gnu awk手册: