如何将参数传递给awk中的printf?

时间:2017-04-04 13:11:39

标签: 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传递给format.awk,如何编写语句

printf("%ns\\\n" ,$0);
awk -f format.awk  -v n=52 test

awk:运行时错误:printf中的转换不正确(编号1)(“% - ns \ “)
FILENAME =“test”FNR = 2 NR = 2

2 个答案:

答案 0 :(得分:2)

是的,你可以,见下面的例子:

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的动态宽度和预处理能力(例如,   "%*。* s")受支持。而不是提供明确的宽度和/或prec   格式字符串中的值,它们在参数列表中传递。

引自gnu awk手册: https://www.gnu.org/software/gawk/manual/html_node/Format-Modifiers.html

答案 1 :(得分:0)

awk中,字符串插值不起作用。你需要说

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