Linux 如何计算列的平均值

Linux 如何计算列的平均值,linux,shell,scripting,Linux,Shell,Scripting,有人知道我如何计算这些列(在linux上)的平均值吗 例如:mean(第2列)您可以使用python,它在Linux中可用 如果它来自一个文件,看看这个,只需使用float即可 例如: #mean.py def main(): with open("mean.txt", 'r') as f: data = [map(float, line.split()) for line in f] columnTwo = [] for row in data:

有人知道我如何计算这些列(在linux上)的平均值吗


例如:mean(第2列)

您可以使用python,它在Linux中可用

如果它来自一个文件,看看这个,只需使用float即可

例如:

#mean.py 
def main():
    with open("mean.txt", 'r') as f:
        data = [map(float, line.split()) for line in f]

    columnTwo = []
    for row in data:
        columnTwo.append( row[1] )

    print  sum(columnTwo,0.0) / len( columnTwo )



if __name__=="__main__":
    main()
印刷品14.38

我只是将数据包含在mean.txt文件中,而不是行标题:“sda”

Awk:

awk '{ total += $2 } END { print total/NR }' yourFile.whatever
改为:

  • 对于每一行,将第2列添加到变量“total”中
  • 在文件末尾,打印“总计”除以记录数
    • 为了好玩:

      with open("mean.txt", 'r') as f: 
          n,t = map(sum, zip(*((1, float(line.split()[1])) for line in f)))
      print t/n
      
      将使用以下行计算平均值:

      r -k2 mean file.txt
      
      第二栏。它还可以进行更为复杂的统计分析,因为它用于所有的统计分析。

      Perl解决方案:

      perl -lane '$total += $F[1]; END{print $total/$.}' file
      
      -a
      自动将该行拆分为@F数组,该数组从0开始索引
      $。
      是行号

      如果字段之间用逗号而不是空格分隔:

      perl -F, -lane '$total += $F[1]; END{print $total/$.}' file
      
      要打印所有列的平均值,请将总计分配给数组@t:

      perl -lane 'for $c (0..$#F){$t[$c] += $F[$c]}; END{for $c (0..$#t){print $t[$c]/$.}}' 
      
      输出:

      0
      0.485
      14.38
      1.74
      0.888333333333333
      77.27
      49.8266666666667
      39.91
      1.29833333333333
      434.131666666667
      

      我的第一个想法可能也是Python。。。但是在这里列出这个列表可能效率太低了,因为您实际上只需要行的总数和行数。(还有,为了好玩:
      将open(“mean.txt”,“r”)作为f:n,t=map(sum,zip(*(1,float(line.split()[1]),表示f中的行));print t t/n
      )@Porges:如何访问特定的间隔:假设在第二列中,我想找到元素2到6的平均值?@SathishKrishnan这有点晚了,但是对于其他人:您可以在第一部分前面加上
      NR==2,NR==6{total+=…
      (请参阅:)
      0
      0.485
      14.38
      1.74
      0.888333333333333
      77.27
      49.8266666666667
      39.91
      1.29833333333333
      434.131666666667