Определения функций могут появляться где угодно между правилами программы awk.Из стандарта POSIX :
Язык awk также предоставляет пользовательские функции.Такие функции могут быть определены как:
function name([parameter, ...]) { statements }
Функция может указываться в любом месте в программе awk;в частности, его использование может предшествовать его определению.Область действия функции является глобальной. Определения функций могут появляться в любом месте в программе, где разрешена пара шаблон-действие.
Это означает, что действительная программа awk выглядит следующим образом:
( pattern1 ) { action1 }
function name([parameter, ...]) { statements }
( pattern2 ) { action2 }
...
В исходном коде вы написали неверное
( pattern ) { function name([paramter, ...]) { statements }
action }
Таким образом, исправленная версия вашей awk
детали будет выглядеть так:
awk 'function mma(num) {
if(min==""){min=max=$1};
if($1>max) {max=$1};
if($1<min) {min=$1};
total+=$1;
count+=1;
avg=total/count;
}
{ min=""; max=""; avg=""
mma($1); mma($2); mma($3)
print avg, max, min
}'
update: из комментариев, возможно, было бы более полезно использовать
awk '{ avg=($1+$2+$3)/3; min=avg; max=avg;
min=($1<min) ? $1 : min; max=($1>max) ? $1 : max
min=($2<min) ? $2 : min; max=($2>max) ? $2 : max
min=($3<min) ? $3 : min; max=($3>max) ? $3 : max
print avg,max, min } ' /proc/loadavg
Однако, это сомнительно, поскольку взятие среднего значения очень ...
Также интереснокоманда sar
.