首页 > 解决方案 > 如何强制 AWK 将字符串评估为数学表达式?

问题描述

有没有办法在 awk 中将字符串评估为数学表达式?

balter@spectre3:~$ echo "sin(0.3) 0.3" | awk '{print $1,sin($2)}'
sin(0.3) 0.29552

我想知道一种将第一个输入评估为 0.29552 的方法。

标签: mathawkevaluate

解决方案


您可以创建自己的 eval 函数,该函数再次调用 awk 以执行您想要的任何命令:

$ cat tst.awk
{ print eval($1), sin($2) }

function eval(str,      cmd,line,ret) {
    cmd = "awk \047BEGIN{print " str "; exit}\047"
    if ( (cmd | getline line) > 0 ) {
        ret = line
    }
    close(cmd)
    return ret
}

$ echo 'sin(0.3) 0.3' | awk -f tst.awk
0.29552 0.29552

$ echo '4*7 0.3' | awk -f tst.awk
28 0.29552

$ echo 'tolower("FOO") 0.3' | awk -f tst.awk
foo 0.29552

推荐阅读