1

我有一个包含这样行的文件(列是制表符分隔的)

2    1.414455    3.70898
2    2.414455    3.80898
2    3.414455    3.90898
2    1.414455    3.90898
4    4.414455    7.23898
4    3.414455    6.23898
4    5.414455    8.23898

即有连续的行,其中第一列是整数,其余两列是浮点数。

我想减少它们如下

2    2.164455    3.75898
4    4.414455    7.23898

我保留第一列,并对具有相同第一列的所有元素取第二列和第三列的平均值。具有相同第一个元素的连续行数可能不同,但它们始终是连续的。

我可以在 perl 中做到这一点,但想知道是否有更简单的 bash / sed / awk 组合可以为我做同样的事情?

4

1 回答 1

3

使用 awk:

awk '{a[$1]+=$2;b[$1]+=$3;c[$1]++;}END{for(i in c)print i, a[i]/c[i],b[i]/c[i];}' file
2 2.16445 3.83398
4 4.41446 7.23898

使用 3 个不同的数组:a 和 b 保留第 2 列和第 3 列的总和,c 保留元素的数量。最后,计算平均值并打印出来。

于 2012-11-06T05:24:39.203 回答