How can I quickly sum all numbers in a file? How can I quickly sum all numbers in a file? bash bash

How can I quickly sum all numbers in a file?


You can use awk:

awk '{ sum += $1 } END { print sum }' file


None of the solution thus far use paste. Here's one:

paste -sd+ filename | bc

As an example, calculate Σn where 1<=n<=100000:

$ seq 100000 | paste -sd+ | bc -l5000050000

(For the curious, seq n would print a sequence of numbers from 1 to n given a positive number n.)


For a Perl one-liner, it's basically the same thing as the awk solution in Ayman Hourieh's answer:

 % perl -nle '$sum += $_ } END { print $sum'

If you're curious what Perl one-liners do, you can deparse them:

 %  perl -MO=Deparse -nle '$sum += $_ } END { print $sum'

The result is a more verbose version of the program, in a form that no one would ever write on their own:

BEGIN { $/ = "\n"; $\ = "\n"; }LINE: while (defined($_ = <ARGV>)) {    chomp $_;    $sum += $_;}sub END {    print $sum;}-e syntax OK

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:

use 5.010;use File::Map qw(map_file);map_file my $map, $ARGV[0];$sum += $1 while $map =~ m/(\d+)/g;say $sum;