小编典典

计算并打印一列中字符串的平均值

linux

我得到了一个带有2列值的.txt文件。它们是2D坐标,因此第一列代表x值,第二列代表z值。不幸的是,有些行具有相同的x值但具有不同的z值。我想计算z值的平均值,以便将单个z与单个x关联。我所拥有的一个样本是:

 435.212 108.894
 435.212 108.897
 435.212 108.9
 435.212 108.903

如您所见,x值435.212与4个不同的z值相关联。我想拥有的是:

435.212 108.8985

其中108.8985是(108.894 + 108.897 + 108.9 + 108.903)/
4的结果。当然,我不想修改其他x和z值,因此结果将是这样的:

之前:

 435.238 108.9
 435.25 108.9
 435.262 108.9
 435.275 108.9
 435.212 108.894 <---
 435.212 108.897<---
 435.212 108.9<---
 435.212 108.903<---

后:

 435.238 108.9
 435.25 108.9
 435.262 108.9
 435.275 108.9
 435.212 108.8985 <---average

与单个x关联的z值的数量可能会有所不同。

我正在使用linux命令行,尽管我可以在linux命令行上使用其他任何程序/实用程序,但我虽然要使用awk来完成这项工作。


阅读 337

收藏
2020-06-03

共1个答案

小编典典

这是一种方法awk

$ awk '{a[$1]+=$2; ++b[$1]} END {for (i in a) print i, a[i]/b[i]}' file
435.212 108.899
435.25 108.9
435.238 108.9
435.262 108.9
435.275 108.9

说明

{a[$1]+=$2; ++b[$1]}

  • 将z值(第二列)存储在array中a
  • 将每个x值(第1列)的元素数量存储在array中b

END {for (i in a) print i, a[i]/b[i]}'

  • 打印结果,循环遍历数组中存储的值。

要使用其他数字格式(例如4个浮点值),您还可以使用:

printf "%d %.4f\n", i, a[i]/b[i]
2020-06-03