我对使用 awk 非常陌生,但我在 Fredrik Pihl 对这个问题的回答中找到了很多帮助,关于如何计算共享另一个字段 ($1) 的许多记录的字段平均值 ($3):
问题:如果行(特定字段)匹配,则 awk 列的平均部分
输入样本:
$cat NDVI-bm
P01 031.RAW 0.516 0 0
P01 021.RAW 0.449 0 0
P02 045.RAW 0.418 0 0
P03 062.RAW 0.570 0 0
P03 064.RAW 0.469 0 0
P04 083.RAW 0.636 0 0
P04 081.RAW 0.592 0 0
P04 082.RAW 0.605 0 0
P04 084.RAW 0.648 0 0
P05 093.RAW 0.748 0 0
弗雷德里克·皮尔的回答:
{
sum[$1]+=$3
cnt[$1]++
}
END {
print "Name" "\t" "sum" "\t" "cnt" "\t" "avg"
for (i in sum)
print i "\t" sum[i] "\t" cnt[i] "\t" sum[i]/cnt[i]
}
但是,我还试图计算匹配字段的方差(每个值与平均值之间的差异平方和除以计数)。我想我可能需要一种方法来计算每个匹配记录的 END 结构之前的平均值,或者是否可以在 END 结构中进行整个方差计算,但是我需要以某种方式检索 $3 的原始值。我也不知道该怎么做。感谢您的任何提示。