是否有任何命令行工具可以接受来自标准输入的数字流(以 ascii 格式)并提供该流的基本描述性统计信息,例如最小值、最大值、平均值、中值、RMS、分位数等?欢迎使用命令行链中的下一个命令解析输出。工作环境是 Linux,但欢迎使用其他选项。
用于计算值流的基本统计数据的命令行工具
机器算法验证
描述性统计
计算统计
2022-01-16 01:32:07
4个回答
你可以用R来做到这一点,这可能有点矫枉过正......
编辑 2:[哎呀,当我重新输入此内容时,看起来像其他人一样Rscript
。] 我找到了一种更简单的方法。与 R 一起安装应该是Rscript
,这意味着做你想做的事情。例如,如果我有一个包含bar
数字列表的文件,每行一个:
Rscript -e 'summary (as.numeric (readLines ("stdin")))' < bar
将文件中的数字发送到 R 并在行summary
上运行 R 的命令,返回如下内容:
Min. 1st Qu. Median Mean 3rd Qu. Max.
1.00 2.25 3.50 3.50 4.75 6.00
您还可以执行以下操作:
Rscript -e 'quantile (as.numeric (readLines ("stdin")), probs=c(0.025, 0.5, 0.975))'
得到分位数。您显然可以使用以下内容切断第一行输出(包含标签):
Rscript -e 'summary (as.numeric (readLines ("stdin")))' < bar | tail -n +2
我强烈建议您首先在交互式 R 中做您想做的事情,以确保您的命令正确。在尝试这个时,我省略了右括号,Rscript 什么也不返回——没有错误消息,没有结果,什么也没有。
(作为记录,文件栏包含:
1
2
3
4
5
6
试试“st”:
$ seq 1 10 | st
N min max sum mean stddev
10 1 10 55 5.5 3.02765
$ seq 1 10 | st --transpose
N 10
min 1
max 10
sum 55
mean 5.5
stddev 3.02765
您还可以看到五个数字摘要:
$ seq 1 10 | st --summary
min q1 median q3 max
1 3.5 5.5 7.5 10
你可以在这里下载:
(免责声明:我写了这个工具:))
R 提供了一个名为Rscript的命令。如果您只能在命令行上粘贴几个数字,请使用这一行:
Rscript -e 'summary(as.numeric(commandArgs(TRUE)))' 3 4 5 9 7
这导致
Min. 1st Qu. Median Mean 3rd Qu. Max.
3.0 4.0 5.0 5.6 7.0 9.0
如果要从标准输入中读取,请使用:
echo 3 4 5 9 7 | Rscript -e 'summary(as.numeric(read.table(file("stdin"))))'
如果标准输入上的数字由回车符分隔(即每行一个数字),请使用
Rscript -e 'summary(as.numeric(read.table(file("stdin"))[,1]))'
可以为这些命令创建别名:
alias summary='Rscript -e "summary(as.numeric(read.table(file(\"stdin\"))[,1]))"'
du -s /usr/bin/* | cut -f1 | summary
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.0 8.0 20.0 93.6 44.0 6528.0
其它你可能感兴趣的问题