Como calcular o valor de cada linha com o comando awk

Como calcular o valor de cada linha com o comando awk

Eu tenho um arquivo de folha de pagamento

Arquivo de folha de pagamento

Você pode me ajudar a calcular o valor de cada linha usando o comando awk, em cada valor na linha -10? Resultado

Só consigo calcular a primeira linha com este comando:

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

Responder1

Fazer:

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 os campos add cria array sumcom o primeiro campo como chave e os valores do campo subtraídos por 10 como valor(es)

  • END{for (i in sum) print i, "Total =", sum[i]}, imprime as chaves e valores do array no formato de saída desejado

Exemplo:

% 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

Responder2

A maioria dos sistemas que possuem o awk também possuem perl, que se sobrepõe um pouco, mas lida com esse caso de maneira mais conveniente. Se você tiver e houver apenas uma linha por funcionário, basta

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

Se houver (ou puder haver) mais de uma linha para um funcionário e @heemayl estiver correto, você deseja que elas sejam adicionadas a um único total por funcionário

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

informação relacionada