awk是否支持类似于en eval的构造通过连接参数来运行命令

awk是否支持类似于en eval的构造通过连接参数来运行命令,awk,gawk,Awk,Gawk,这在我最近的一个答案中出现了,它实现了一个单独使用awk进行简单算术评估的用例。想象一个简单的简单函数 awkf () { awk -v argv="$*" 'BEGIN{ pi=3.14159265359; printf "%5.5f\n", argv }' ; } 显然我打算用它来做算术 awkf "1+2" 但这些并没有产生预期的产出。最后,我在awk主体的双引号中使用了$*来实现这一点。虽然它可以工作,但我不想那样做。有没有办法做到这一点以达到预期的效果 awkf () { awk

这在我最近的一个答案中出现了,它实现了一个单独使用
awk
进行简单算术评估的用例。想象一个简单的简单函数

awkf () { awk -v argv="$*" 'BEGIN{ pi=3.14159265359; printf "%5.5f\n", argv }' ; }
显然我打算用它来做算术

awkf "1+2"
但这些并没有产生预期的产出。最后,我在
awk
主体的双引号中使用了
$*
来实现这一点。虽然它可以工作,但我不想那样做。有没有办法做到这一点以达到预期的效果

awkf () { awk -v argv="$*" 'BEGIN{ pi=3.14159265359; printf "%5.5f\n", 1+2}' ; }
#                                                                      ^^^^ when I pass "1+2"
i、 做
awkf“1+2”
我希望得到的结果是
3.00000


建议使用其他工具,如
bc
,超出了当前问题的范围。我只是想知道,如何使用awk来实现这一点。

您可以将脚本编写为函数

$ function awkf() { awk "BEGIN{print $*}"; }
$ awkf 4/3
1.33333

$ awkf 3 + 4
7
要添加格式,您必须执行以下操作

$ function awkf() { awk "BEGIN{printf "\"%5.5f\\n\"," $*}"; }

你能进一步描述一下这个
printf“%5.5f\n”,1+2吗?它是否缺少任何
()
可能?这可能会有所帮助:@DaemonPainter:这将对给定的值求和,并按照格式说明符中提供的格式打印结果我尝试了
awkf(){awk-v argv=“$*”'BEGIN{pi=3.14159265359;printf“%5.5f\n”,1+2};}
,但没有输出。紧接着,一个
awkf--help
它打印了
3.0000
我想要这个,一个问题是它遗漏了
printf
格式说明符选项。是否可以使用
printf