我有一个包含这些行的文件(列是标签分隔的)
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混音可以为我做同样的事情?
答案 0 :(得分: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保持元素的数量。最后,计算平均值并打印出来。