gpt4 book ai didi

linux - awk函数语法错误?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:50:35 25 4
gpt4 key购买 nike

谁能看出我为什么会这样

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 standard :

The awk language also provides user-defined functions. Such functions can be defined as:

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

A function can be referred to anywhere in an awk program; in particular, its use can precede its definition. The scope of a function is global. <snip> Function definitions can appear anywhere in the program where a pattern-action pair is allowed.

这意味着一个有效的 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 命令也很有趣。

关于linux - awk函数语法错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50528466/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com