【问题标题】:calculate and print the average value of strings in a column计算并打印列中字符串的平均值
【发布时间】:2013-10-21 20:51:54
【问题描述】:

我得到了一个包含 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 命令行上使用的任何其他程序/实用程序都可以。

【问题讨论】:

    标签: linux awk coordinates average


    【解决方案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 值(第 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]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-15
      • 1970-01-01
      • 1970-01-01
      • 2021-12-15
      • 2022-01-23
      • 1970-01-01
      • 2022-01-15
      相关资源
      最近更新 更多