I have a file with the following:
37 * 60 + 55.52
34 * 60 + 51.75
36 * 60 + 2.88
36 * 60 + 14.94
36 * 60 + 18.82
36 * 60 + 8.37
37 * 60 + 48.71
36 * 60 + 34.17
37 * 60 + 42.52
37 * 60 + 51.55
35 * 60 + 34.76
34 * 60 + 18.90
33 * 60 + 49.63
34 * 60 + 37.73
36 * 60 + 4.49
I need to write a shell command or Bash script that, for each line in this file, evaluates the equation and prints the result. For example, for line one I expect to see 2275.52
printed. Each result should print once per line.
I've tried cat math.txt | xargs -n1 expr
, but this doesn't work. It also seems like awk
might be able to do this, but I'm unfamiliar with that command's syntax, so I don't know what it would be.
Best Answer
This
awk
seems to do the trick:From here
Note that we're using
($i)
instead of$i
to avoid problems with arithmetic expressions like1 > 2
(print 1 > 2
would print1
into a file called2
, whileprint (1 > 2)
prints0
, the result of that arithmetic expression).Note that since the expansion of the
$i
shell variable ends up being interpreted as code byawk
, that's essentially a code injection vulnerability. If you can't guarantee the file only contains valid arithmetic expressions, you'd want to put some input validation in place. For instance, if the file had asystem("rm -rf ~")
line, that could have dramatic consequences.