使用Bash脚本计算均值,方差和范围

Bri*_*mes 3 bash numeric

给定文件file.txt:

AAA 1 2 3 4 5 6 3 4 5 2 3 
BBB 3 2 3 34 56 1 
CCC 4 7 4 6 222 45 
Run Code Online (Sandbox Code Playgroud)

有没有人对如何使用Bash脚本分别计算每个项目(即AAA,BBB,CCC)的均值,方差和范围有任何想法?谢谢.

Ada*_*iss 7

这是一个解决方案awk,计算:

  • 最小=每行的最小值
  • maximum =每行的最大值
  • average =μ=每行上所有值的总和除以数字的计数.
  • 方差= 1/n×[(Σx)² - Σ(x²)]其中
    n =线上的数值= NF- 1(以awk表示,NF=线上的场数)
    (Σx)²=和的平方线
    Σ(x²)上的值的值=线上值的平方和

 

awk '{
  min = max = sum = $2;       # Initialize to the first value (2nd field)
  sum2 = $2 * $2              # Running sum of squares
  for (n=3; n <= NF; n++) {   # Process each value on the line
    if ($n < min) min = $n    # Current minimum
    if ($n > max) max = $n    # Current maximum
    sum += $n;                # Running sum of values
    sum2 += $n * $n           # Running sum of squares
  }
  print $1 ": min=" min ", avg=" sum/(NF-1) ", max=" max ", var=" ((sum*sum) - sum2)/(NF-1);
}' filename
Run Code Online (Sandbox Code Playgroud)

输出:

AAA: min=1, avg=3.45455, max=6, var=117.273
BBB: min=1, avg=16.5, max=56, var=914.333
CCC: min=4, avg=48, max=222, var=5253
Run Code Online (Sandbox Code Playgroud)

请注意,您可以将awk脚本(单引号之间的所有内容,但不包括单引号)保存在文件中,比如调用script,并执行它awk -f script filename