Cómo calcular el valor de cada línea con el comando awk

Cómo calcular el valor de cada línea con el comando awk

tengo un archivo de nómina

Archivo de Nómina

¿Pueden ayudarme a calcular el valor de cada fila usando el comando awk, en cada valor de la línea -10? Resultado

Sólo puedo calcular la primera línea con este comando:

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

Respuesta1

Hacer:

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}itera sobre los campos y agrega crea una matriz sumcon el primer campo como clave y los valores del campo restados en 10 como valor(es)

  • END{for (i in sum) print i, "Total =", sum[i]}, imprime las claves y valores de la matriz en el formato de salida deseado

Ejemplo:

% 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

Respuesta2

La mayoría de los sistemas que tienen awk también tienen perl, que se superpone bastante pero que maneja este caso de manera más conveniente. Si lo tienes y solo hay una línea por empleado, simplemente

perl -nae '$e=shift @F; $t+=$_-10 for @F; print $e." Total= ".$t.$/' inputfile

Si hay (o puede haber) más de una línea para un empleado y @heemayl es correcto, desea que se agreguen a un total único por empleado.

perl -nae '$e=shift @F; $t{$e}+=$_-10 for @F;}{print $_." Total= ".$t{$_}.$/ for keys %t' inputfile

información relacionada