1

我得到了一个包含 2 列值的 .txt 文件。它们是二维坐标,所以第一列代表 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 命令行,我想使用 awk 来完成这项工作,尽管我可以在 linux 命令行上使用的任何其他程序/实用程序都可以。

4

1 回答 1

2

这是一种方法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 值(第 2 列)存储在数组中a
  • 存储数组中每个 x 值(第一列)的元素数量b

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

  • 打印遍历存储在数组中的值的结果。

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

printf "%d %.4f\n", i, a[i]/b[i]
于 2013-10-14T10:07:05.810 回答