You can use the R programming language.
Here is a quick and dirty R script:
#! /usr/bin/env Rscript
d<-scan("stdin", quiet=TRUE)
cat(min(d), max(d), median(d), mean(d), sep="\n")
Note the "stdin"
in scan
which is a special filename to read from standard input (that means from pipes or redirections).
Now you can redirect your data over stdin to the R script:
$ cat datafile
1
2
4
$ ./mmmm.r < datafile
1
4
2
2.333333
Also works for floating points:
$ cat datafile2
1.1
2.2
4.4
$ ./mmmm.r < datafile2
1.1
4.4
2.2
2.566667
If you don't want to write an R script file you can invoke a true one-liner (with linebreak only for readability) in the command line using Rscript
:
$ Rscript -e 'd<-scan("stdin", quiet=TRUE)' \
-e 'cat(min(d), max(d), median(d), mean(d), sep="\n")' < datafile
1
4
2
2.333333
Read the fine R manuals at http://cran.r-project.org/manuals.html.
Unfortunately the full reference is only available in PDF. Another way to read the reference is by typing ?topicname
in the prompt of an interactive R session.
For completeness: there is an R command which outputs all the values you want and more. Unfortunately in a human friendly format which is hard to parse programmatically.
> summary(c(1,2,4))
Min. 1st Qu. Median Mean 3rd Qu. Max.
1.000 1.500 2.000 2.333 3.000 4.000