I have a series piped greps, awks and seds which produce a list of numbers, one on each line. Something like this:
1.13
3.59
1.23
How can i pipe this to something which will output the average, max, and min?
I have a series piped greps, awks and seds which produce a list of numbers, one on each line. Something like this:
1.13
3.59
1.23
How can i pipe this to something which will output the average, max, and min?
Since you're already using awk
blahblahblah | awk '{if(min==""){min=max=$1}; if($1>max) {max=$1}; if($1<min) {min=$1}; total+=$1; count+=1} END {print total/count, max, min}'
awk
pattern in /usr/local/bin/stats
or such, and then use it as blabla | stats
.
– A-B-B
Aug 29 '13 at 20:11
I find this program useful for generating stats on lists of numbers at the command line: http://web.cs.wpi.edu/~claypool/misc/stats/stats.html
There is also simple-r, which can do almost everything that R can, but with less keystrokes:
https://code.google.com/p/simple-r/
To calculate average, max, and min, one would have to type one of:
r summary file.txt
r summary - < file.txt
cat file.txt | r summary -
With a tip of the hat to @DerfK:
perl -lane '$n=$F[0]; if(not defined $min){$min=$max=$n}; if($n>$max){$max=$n}; if($n<$min){$min=$n}; $total+=$n; $count+=1; END{print $total/$count." $max $min"}'
$F[0]
is the value in the first (0'th) field of each line
If your input data is comma separated, add the -F,
modifier before -lane