【问题标题】:how to get the mean of a column between two patterns iteratively using awk.如何使用 awk 迭代地获取两个模式之间的列的平均值。
【发布时间】:2017-11-23 00:16:22
【问题描述】:

我有一个这种格式的大文件

#1995GO
CCD3    0.099   -0.008      0.047       0.019       2       2       4
CCD7    0.090   -0.040      0.000       0.000       1       1       4
#

#1995SM55
CCD3    0.174    0.026      0.026       0.047       4       4       10
CCD7    0.157    0.006      0.015       0.011       5       5       10
#

#1999TC36
CCD3    0.080    0.019      0.008       0.001       2       2       4
CCD7    0.085    0.032      0.004       0.014       2       2       4
#

我想得到 ## 之间每个内容的第 4 列的平均值。例如,对于我要打印的第一个 ((0.047 + 0.000 )/ 2)。

【问题讨论】:

    标签: bash awk


    【解决方案1】:

    awk方法:

    awk '/^#[0-9]/{ f=1;next }/^#[[:space:]]*$/{ print s/c; f=c=s=0 }f{ ++c; s+=$4 }' file
    

    输出:

    0.0235
    0.0205
    0.006
    

    【讨论】:

      【解决方案2】:

      这是使用 awk 的一种方法:-

      awk '
              !/^#/ {
                      T += $4
                      C += 1
              }
              /^#$/ {
                      printf ( "%.3f\n", ( T /C ) )
                      T = C = 0
              }
      ' file
      

      【讨论】:

        猜你喜欢
        • 2023-02-15
        • 2019-09-28
        • 1970-01-01
        • 2012-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多