Как рассчитать значение каждой строки с помощью команды awk

Как рассчитать значение каждой строки с помощью команды awk

У меня есть файл с расчетом заработной платы

Файл с расчетом заработной платы

Можете ли вы помочь мне вычислить значение для каждой строки с помощью команды awk, в каждом значении в строке -10? Результат

Я могу вычислить только первую строку с помощью этой команды:

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

решение1

Делать:

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}выполняет итерацию по полям add, создает массив sumс первым полем в качестве ключа и значениями полей, вычтенными из 10, в качестве значений

  • END{for (i in sum) print i, "Total =", sum[i]}, печатает ключи и значения массива в желаемом формате вывода

Пример:

% 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

решение2

Большинство систем, в которых есть awk, также имеют perl, который довольно сильно перекрывает, но, как оказалось, обрабатывает этот случай более удобно. Если у вас есть он и на каждого сотрудника приходится только одна строка, просто

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

Если для сотрудника указано (или может быть) более одной строки и @heemayl прав, вы хотите, чтобы они были добавлены в одну общую сумму для каждого сотрудника.

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

Связанный контент