我得到了一个包含两列值的.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命令行,虽然我可以在linux命令行上使用任何其他程序/实用程序,但我还是使用awk来完成这项工作。

最佳答案

这是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值(第二列)存储在数组a中。
存储数组b中每个x值(第1列)的元素数量。
END {for (i in a) print i, a[i]/b[i]}'
通过数组中存储的值循环打印结果。
要使用其他数字格式(例如4个浮点值),还可以使用:
printf "%d %.4f\n", i, a[i]/b[i]

关于linux - 计算并打印一列中字符串的平均值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19357707/

10-12 17:07