AWK 递归地用第一行减去第三行,用第四行减去第六行,等等,然后求平均值

AWK 递归地用第一行减去第三行,用第四行减去第六行,等等,然后求平均值

我有一个包含数字列表的文件,如下所示

4.90889
4.92681
4.99236
5.29358
5.3115
5.37706
5.9354
5.95332
6.01888

我需要用第一个数字减去第三个数字,然后递归地处理下一个 3 行块,保存结果并求平均值。我知道如何用 awk 求平均值,但我在第一次操作时就迷失了。

使用上面的数字将是:

4.99236 - 4.90889 = 0.08347
5.37706 - 5.29358 = 0.08348
6.01888 - 5.9354 = 0.08348

(0.08347 + 0.08348 + 0.08348)/3 = 0,0834766666667

答案1

通过一些模运算:

awk '
  FNR%3 == 1 {last = $0} 
  FNR%3 == 0 {sum += $0 - last; n++} 
  END {print (n > 0 ? sum/n : 0)}
' file

相关内容