有没有一种方法可以将字符串作为awk中的数学表达式求值?
balter@spectre3:~$ echo "sin(0.3) 0.3" | awk '{print $1,sin($2)}'
sin(0.3) 0.29552
我想知道一种方法,也可以将第一个输入评估为0.29552。
答案 0 :(得分:3)
awk缺少eval(...)
函数。这意味着awk程序初始化后,您将无法基于输入进行字符串到代码的转换。好的,也许可以做到,但必须在awk中编写自己的解析和评估引擎。
我建议为此使用bc
,例如
[edwbuck@phoenix ~]$ echo "s(0.3)" | bc -l
.29552020666133957510
请注意,这需要将sin
缩短为s
,因为这是bc
的正弦运算。
答案 1 :(得分:2)
您可以只创建自己的eval函数,该函数再次调用awk来执行您想要执行的任何命令:
gcc -g -Wall -pedantic ...
答案 2 :(得分:1)
使用gawk版本4.1.2时:
echo "sin(0.3) 0.3" | awk '{split($1,a,/[()]/);f=a[1];print @f(a[2]),sin($2)}'
tolower(FOO)
也可以。
答案 3 :(得分:1)
这是一个简单的班轮!
math(){ awk "BEGIN{printf $1}"; }
使用示例:
math 1+1
收益“ 2”
math 'sqrt(25)'
产量为“ 5”
x=100; y=5; math "sqrt($x) + $y"
产量“ 15”
答案 4 :(得分:0)
您可以尝试Perl,因为它具有eval()函数。
$ echo "sin(0.3)" | perl -ne ' print eval '
0.29552020666134
$
对于给定的输入,
$ echo "sin(0.3) 0.3" | perl -ne ' /(\S+)\s+(\S+)/ and print eval($1), " ", $2 '
0.29552020666134 0.3
$