Pretend it's a CSV and use CSV tools
The common CSV toolkits "csvkit" and "xsv" include some basic statistics features.
So if your data is formatted like so...
$ echo mynumbers 1 2 3 4 | tr " " "\n" mynumbers 1 2 3 4 ...then you can pretend that is a CSV file and use csvstat or xsv stats
Using csvstat
$ echo mynumbers 1 2 3 4 | tr " " "\n" | csvstat /usr/lib/python2.7/site-packages/agate/table/from_csv.py:74: RuntimeWarning: Error sniffing CSV dialect: Could not determine delimiter 1. "mynumbers" Type of data: Number Contains null values: False Unique values: 4 Smallest value: 1 Largest value: 4 Sum: 10 Mean: 2.5 Median: 2.5 StDev: 1.291 Most common values: 1 (1x) 2 (1x) 3 (1x) 4 (1x) Row count: 4 Using xsv stats
$ echo mynumbers 1 2 3 4 | tr " " "\n" | xsv stats field,type,sum,min,max,min_length,max_length,mean,stddev mynumbers,Integer,10,1,4,1,1,2.5,1.118033988749895 Or if you want this more readable
$ echo mynumbers 1 2 3 4 | tr " " "\n" | xsv stats | xsv table field type sum min max min_length max_length mean stddev mynumbers Integer 10 1 4 1 1 2.5 1.118033988749895 Same things but without headers:
csvstat:
$ echo mynumbers 1 2 3 4 | tr " " "\n" | csvstat --no-header-row /usr/lib/python2.7/site-packages/agate/table/from_csv.py:74: RuntimeWarning: Error sniffing CSV dialect: Could not determine delimiter 1. "a" Type of data: Text Contains null values: False Unique values: 5 Longest value: 9 characters Most common values: 1 (1x) 3 (1x) 2 (1x) mynumbers (1x) 4 (1x) Row count: 5 xsv:
$ echo 1 2 3 4 | tr " " "\n" | xsv stats --no-headers field,type,sum,min,max,min_length,max_length,mean,stddev 0,Integer,10,1,4,1,1,2.5,1.118033988749895 $ echo 1 2 3 4 | tr " " "\n" | xsv stats --no-headers | xsv table field type sum min max min_length max_length mean stddev 0 Integer 10 1 4 1 1 2.5 1.118033988749895