首页 > 解决方案 > 将每行中的所有数字相加,并将它们的平均值添加到行尾 Bash

问题描述

任务是:使用 awk 命令对每行中的所有数字求和,并将平均值添加到每行的末尾。不必每行具有相同数量的数字。例子:

Steven 1 2 3 4 5 
Mark 2 3 4 
Joe 3 5 5 6 

所以结果应该是

Steven 1 2 3 4 5 3
Mark 2 3 4 3
Joe 3 5 5 6 5

我不太清楚如何根据 awk 对数字求和,以及如何将平均值添加到行尾,因为行的长度可能不同。谢谢

标签: bash

解决方案


awk '{ sum = 0;
       for (i = 2; i <= NF; ++i)
           sum += $i
       $(++NF) = int (sum / (NF - 1) + 0.5)
     } 1' file
  • int (sum / (NF - 1) + 0.5)将平均值四舍五入到最接近的整数,
  • 1最后意味着在处理后打印每一行。

上面的命令产生:

Steven 1 2 3 4 5 3
Mark 2 3 4 3
Joe 3 5 5 6 5

推荐阅读