Проблема заключалась в том, что я повторно использовал СТАРЫЙ IP-адрес, к которому уже было привязано правило сетевого брандмауэра. Я был уверен, что в системе все в порядке, поэтому, когда я перенюхал пакеты, идущие на сервер, я увидел, что они были отброшены на уровне сетевого брандмауэра. Решил это и все стало хорошо.
Awk создает неявный цикл вокруг основной части скрипта: за исключением блоков BEGIN
и END
(и определений функций), скрипт выполняется для каждой строки в последовательности.Поэтому было бы очень странно иметь в awk-скрипте цикл типа for (i = 1; i<= NR; i++)
: когда awk проходит первую строку, выполняется тело цикла для i=1
, затем awk проходит вторую строку и тело цикла выполняется для i=1
и i=2
, затем awk проходит вторую строку и тело цикла выполняется для i=1
и i=2
и i=3
и т. д.
Предполагая, что имена сотрудников не повторяются, общая заработная плата каждого работника равна просто $2 * $3
. Вы можете распечатать это, если хотите:
NR == 1 { print $1, $2, $3, "total" }
NR != 1 { print $1, $2, $3, $2 * $3 }
(Условие NR == 1
идентифицирует строку заголовка.)
Общая заработная плата всех сотрудников представляет собой сумму этого выражения для каждой строки кроме строки заголовка. Чтобы рассчитать общую заработную плату для всех сотрудников, добавьте заработную плату текущего сотрудника к промежуточной сумме.
NR != 1 { total += $2 * $3 }
В качестве альтернативы, что-то вроде этого работает нормально и имеет хороший вывод:
awk -v OFS="\t" 'NR==1{$4="total"}NR>1{$4=$2*$3}1' testfile.dat
#Output:
Name Rate Hours total
Clark 8.5 42 357
Sarah 18.5 19 351.5
Joe 10 25 250
Paul 12 5 60