我有一系列管道 greps、awks 和 seds,它们会生成一个数字列表,每行一个。如下所示:
1.13
3.59
1.23
我如何将其通过管道传输到可以输出平均值、最大值和最小值的东西?
答案1
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}'
答案2
我发现此程序对于在命令行上生成数字列表的统计数据很有用:http://web.cs.wpi.edu/~claypool/misc/stats/stats.html
答案3
还有 simple-r,它几乎可以完成 R 所能完成的所有功能,但所需的按键更少:
https://code.google.com/p/simple-r/
要计算平均值,最大值和最小值,必须输入以下之一:
r summary file.txt
r summary - < file.txt
cat file.txt | r summary -
答案4
您可以使用ministat
:
$ ministat -n
1.13
3.59
1.23
x <stdin>
N Min Max Median Avg Stddev
x 3 1.13 3.59 1.23 1.9833333 1.3923122
并且使用,tail
您可以提取单个字段,例如给出平均值(因为它:取最后一行;删除多余的空格;然后取该行上的第六个非空格标记)。sed
cut
ministat -n | tail -1 | sed -r 's/ +/ /g;' | cut -d\ -f 6