有没有办法将字符串计算为 awk 中的数学表达式?
balter@spectre3:~$ echo "sin(0.3) 0.3" | awk '{print $1,sin($2)}'
sin(0.3) 0.29552
Run Code Online (Sandbox Code Playgroud)
我想知道一种将第一个输入计算为 0.29552 的方法。
您可以创建自己的 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
Run Code Online (Sandbox Code Playgroud)
这是一个简单的衬里!
math(){ awk "BEGIN{printf $1}"; }
Run Code Online (Sandbox Code Playgroud)
使用示例:
math 1+1
Run Code Online (Sandbox Code Playgroud)
产量“2”
math 'sqrt(25)'
Run Code Online (Sandbox Code Playgroud)
产量“5”
x=100; y=5; math "sqrt($x) + $y"
Run Code Online (Sandbox Code Playgroud)
产量“15”