awk 是否支持 en eval like construct to 运行 a command by concatenating arguments
Does awk support en eval like construct to run a command by concatenating arguments
这出现在我最近的一个答案中,以实现单独使用 awk
进行简单算术评估的用例。想象一下 this
的一个简单的微不足道的函数
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"
即做 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\"," $*}"; }
这出现在我最近的一个答案中,以实现单独使用 awk
进行简单算术评估的用例。想象一下 this
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"
即做 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\"," $*}"; }