Como calcular o valor de cada linha com o comando awk

0

Eu tenho um arquivo de folha de pagamento

Vocêpodemeajudaracalcularovalordecadalinhausandoocomandoawk,Emcadavalornalinha-10?

Eu só posso calcular a primeira linha com este comando:

awk '{sum += $3*7} END {print sum}' RS= payroll.txt
    
por Fii 01.11.2016 / 05:20

2 respostas

0

Faça:

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 nos campos adicionar cria matriz sum com o primeiro campo como chave e os valores do campo subtraídos por 10 como o (s) valor (es)

  • END{for (i in sum) print i, "Total =", sum[i]} , imprime as chaves e valores da matriz 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
    
por 01.11.2016 / 05:28
0

A maioria dos sistemas que possuem o awk também tem o perl, que se sobrepõe um pouco, mas acontece de lidar com este caso de maneira mais conveniente. Se você tem e há apenas uma linha por funcionário, apenas

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

Se houver (ou puder ser) mais de uma linha para um funcionário e o @emaemayl estiver correto, você deseja que eles sejam adicionados a um único total por funcionário

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

Tags