How to coerce AWK to evaluate string as math expression?

前端 未结 5 810
一生所求
一生所求 2020-12-17 06:25

Is there a way to evaluate a string as a math expression in awk?

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


        
5条回答
  •  轻奢々
    轻奢々 (楼主)
    2020-12-17 06:48

    You can just create your own eval function which calls awk again to execute whatever command you want it to:

    $ 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
    

提交回复
热议问题