任务是:使用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一致的数字求和以及如何在行尾添加平均值。谢谢
答案 0 :(得分:2)
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
答案 1 :(得分:1)
perl在这里很好用:
perl -MList::Util=sum -MPOSIX=round -lane '
push @F, round(sum(@F[1..$#F]) / (@F - 1)) if @F > 1;
print "@F"
' file
答案 2 :(得分:0)
您可以尝试
awk '{ sum = 0; for (i = 2; i <= NF; ++i) {sum += $i ;} print $0, sum/(NF-1)}' a.txt
输出为
Steven 1 2 3 4 5 3 3
Mark 2 3 4 3 3
Joe 3 5 5 7 5 5