Antwort1
Tun:
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}
iteriert über die Felder add erstellt ein Arraysum
mit dem ersten Feld als Schlüssel und den Feldwerten minus 10 als Wert(e)END{for (i in sum) print i, "Total =", sum[i]}
, druckt die Schlüssel und Werte des Arrays im gewünschten Ausgabeformat
Beispiel:
% 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
Antwort2
Die meisten Systeme, die awk haben, haben auch Perl, was sich zwar ziemlich überschneidet, aber diesen Fall bequemer handhabt. Wenn Sie es haben und es nur eine Zeile pro Mitarbeiter gibt, dann
perl -nae '$e=shift @F; $t+=$_-10 for @F; print $e." Total= ".$t.$/' inputfile
Wenn für einen Mitarbeiter mehrere Zeilen vorhanden sind (oder vorhanden sein können) und @heemayl Recht hat, möchten Sie, dass diese zu einer einzigen Gesamtsumme pro Mitarbeiter addiert werden.
perl -nae '$e=shift @F; $t{$e}+=$_-10 for @F;}{print $_." Total= ".$t{$_}.$/ for keys %t' inputfile