答え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}
フィールドを反復処理して、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があり、従業員ごとに1行しかない場合は、
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