答案1
做:
awk '{for (i=2;i<=NF;i++) sum[$1]+=$i-10} END{for (i in sum) \
print i, "Total =", sum[i]}' file.txt
{for (i=2;i<=NF;i++) sum[$1]+=$i-10}
迭代字段 add 创建数组sum
,其中第一个字段作为键,字段值减去 10 作为值END{for (i in sum) print i, "Total =", sum[i]}
,以所需的输出格式打印数组的键和值
例子:
% cat file.txt
employee1 75 75 75 75 75 75 75
employee2 80 80 80 80 80 80 80
employee3 50 50 50 50 50 50 50
% awk '{for (i=2;i<=NF;i++) sum[$1]+=$i-10} END{for (i in sum) print i, "Total =", sum[i]}' file.txt
employee1 Total = 455
employee2 Total = 490
employee3 Total = 280
答案2
大多数有 awk 的系统也有 perl,它们有很多重叠,但恰好可以更方便地处理这种情况。如果你有它并且每个员工只有一条线,只需
perl -nae '$e=shift @F; $t+=$_-10 for @F; print $e." Total= ".$t.$/' inputfile
如果一名员工有(或可能有)多行且 @heemayl 是正确的,您希望将它们添加到每个员工的单个总数中
perl -nae '$e=shift @F; $t{$e}+=$_-10 for @F;}{print $_." Total= ".$t{$_}.$/ for keys %t' inputfile