linux - 如何计算shell脚本中不同列的标准偏差

标签 linux shell awk stdev

我有一个包含 10 列的数据文件,如下所示

ifile.txt
2  4  4  2  1  2  2  4  2  1
3  3  1  5  3  3  4  5  3  3
4  3  3  2  2  1  2  3  4  2
5  3  1  3  1  2  4  5  6  8

我想添加第 11 列,它将显示 10 列中每一行的标准差。即 STDEV(2 4 4 2 1 2 2 4 2 1) 等等。 我可以通过进行转置,然后使用以下命令并再次进行转置来完成

awk '{x[NR]=$0; s+=$1} END{a=s/NR; for (i in x){ss += (x[i]-a)^2} sd = sqrt(ss/NR); print sd}'

任何人都可以建议一种更简单的方法,以便我可以直接沿着每一行进行。

最佳答案

您也可以对一次传递执行相同的操作。

 awk '{for(i=1;i<=NF;i++){s+=$i;ss+=$i*$i}m=s/NF;$(NF+1)=sqrt(ss/NF-m*m);s=ss=0}1' ifile.txt

关于linux - 如何计算shell脚本中不同列的标准偏差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31377064/

相关文章:

c - SIGALRM 实现

linux - 使用创建的用户登录时 CLI 受限

linux - 登录时启动 Shell 脚本找不到其他文件 (Debian Linux)

Bash/C shell : Are there any drawbacks about escaping all characters of a file path?

linux - grep 在 bash 脚本中失败但在命令行上工作

bash - 适用于 awk v4.0.2 但不适用于 >= 4.2.1 的 awk 表达式

linux - 如何监视文件描述符的新数据可用性?

linux - 在linux系统中查找所有匹配 'name'的文件,并从中搜索 'text'

bash - 使用 join/awk/sed 合并 CSV 文件

bash - 如何清理 masscan 输出 (-oL)