awk是否支持像构造一样通过连接参数来运行命令

时间:2018-04-23 12:15:49

标签: awk gawk

这是我最近的一个答案,用于实现仅使用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"

即做awkf "1+2"我希望得到的结果为3.00000

建议其他工具如bc超出了当前问题的范围。只是想知道如何使用awk

1 个答案:

答案 0 :(得分:1)

您可以将脚本编写为函数

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

$ awkf 3 + 4
7

要添加格式,你必须做引用舞蹈......

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