繁体   English   中英

awk函数语法错误?

[英]awk function syntax error?

有人可以看到我为什么

awk: cmd. line:8:   function mma(num) {
awk: cmd. line:8:   ^ syntax error
awk: cmd. line:8:   function mma(num) {
awk: cmd. line:8:                     ^ syntax error

从这个脚本?

echo "0.24 0.21 0.22 1/1282 10953" | awk '{

  min=""
  max=""
  avg=""

  # find min, max, avg
  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;
  }

  mma($1)
  mma($2)
  mma($3)

  print avg, max, min
}'

函数的定义可以出现在awk程序的规则之间的任何位置。 根据POSIX标准

awk语言还提供了用户定义的功能。 这些功能可以定义为:

 function name([parameter, ...]) { statements } 

可以在awk程序中的任何地方引用函数; 特别是,其使用可以先于其定义。 函数的范围是全局的。 <snip>函数定义可以出现在程序中允许使用模式-动作对的任何位置

这意味着有效的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
     }'

更新:从评论,使用可能会更有用

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命令。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM