Bash 如何使用awk迭代地获得两个模式之间的列的平均值。

Bash 如何使用awk迭代地获得两个模式之间的列的平均值。,bash,awk,Bash,Awk,我有一个这样格式的大文件 #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

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

#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)

以下是一种使用awk的方法:-

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

以下是使用awk的一种方法:-

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

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

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