计算并打印列中string的平均值

我有一个.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命令行,尽pipe我可以在Linux命令行上使用任何其他程序/实用程序,但我仍然使用awk作为作业。

Solutions Collecting From Web of "计算并打印列中string的平均值"

这是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值(第1列)的元素数量存储在数组b

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

  • 打印结果循环存储在数组中的值。

要有另一个数字格式(例如4浮点值),你也可以使用:

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