I have a file which contains several thousand numbers, each on it's own line:
34
42
11
6
2
99
...
I'm looking to write a script which will print the sum of all numbers in the file. I've got a solution, but it's not very efficient. (It takes several minutes to run.) I'm looking for a more efficient solution. Any suggestions?
More succinct:
Here's another one-liner
This assumes the numbers are integers. If you need decimals, try
Adjust 2 to the number of decimals needed.
Another option is to use
jq
:-s
(--slurp
) reads the input lines into an array.For a Perl one-liner, it's basically the same thing as the
awk
solution in Ayman Hourieh's answer:If you're curious what Perl one-liners do, you can deparse them:
The result is a more verbose version of the program, in a form that no one would ever write on their own:
Just for giggles, I tried this with a file containing 1,000,000 numbers (in the range 0 - 9,999). On my Mac Pro, it returns virtually instantaneously. That's too bad, because I was hoping using
mmap
would be really fast, but it's just the same time:I have not tested this but it should work:
You might have to add "\n" to the string before bc (like via echo) if bc doesn't treat EOF and EOL...