So berechnen Sie den Wert jeder Zeile mit dem awk-Befehl

So berechnen Sie den Wert jeder Zeile mit dem awk-Befehl

Ich habe eine Lohnabrechnungsdatei

Lohn- und Gehaltsabrechnungsdatei

Können Sie mir helfen, den Wert für jede Zeile mit dem Awk-Befehl zu berechnen, und zwar für jeden Wert in Zeile -10? Ergebnis

Ich kann mit diesem Befehl nur die erste Zeile berechnen:

awk '{sum += $3*7} END {print sum}' RS= payroll.txt

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 Array summit 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

verwandte Informationen