I am looking for a command that will accept as input multiple lines of text, each line containing a single integer, and output the sum of these integers.
As a bit of background, I have a log file which includes timing measurements, so through grepping for the relevant lines, and a bit of sed
reformatting I can list all of the timings in that file. I'd like to work out the total however, and my mind has gone blank as to any command I can pipe this intermediate output to in order to do the final sum. I've always used expr
in the past, but unless it runs in RPN mode
I don't think it's going to cope with this (and even then it would be tricky).
What am I missing? Given that there are probably several ways to achieve this, I will be happy to read (and upvote
) any approach that works, even if someone else has already posted a different solution that does the job.
Related question: Shortest command to calculate the sum of a column of output on Unix? (credits @Andrew)
Update: Wow, as expected there are some nice answers here. Looks like I will definitely have to give awk
deeper inspection as a command-line tool
in general!
My version:
Real-time summing to let you monitor progress of some number-crunching task.
(There is no need to set
$total
to zero in this case. Neither you can access $total after the finish.)I think AWK is what you are looking for:
You can use this command either by passing the numbers list through the standard input or by passing the file containing the numbers as a parameter.
You can do it in python, if you feel comfortable:
Not tested, just typed:
Sebastian pointed out a one liner script:
You can use your preferred 'expr' command you just need to finagle the input a little first:
The process is:
Paste typically merges lines of multiple files, but it can also be used to convert individual lines of a file into a single line. The delimiter flag allows you to pass a x+x type equation to bc.
Alternatively, when piping from stdin,