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