微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

unix – 使用awk的最大值和最小值

您如何从以下文件中找到以MATH开头的行的最大和最小a,b,c值?

TITLE     a       b       c
MATH      12.3    -0.42   5.5
ENGLISH   70.45   3.21    6.63
MATH      3.32    2.43    9.42
MATH      3.91    -1.56   7.22
ENGLISH   89.21   4.66    5.32

它不能只是一个命令行.它必须是使用BEGIN函数和END的脚本文件.

我得到了错误的最小值,当我运行程序时,我最终得到一个字符串max.请帮忙!

这是我的代码列a:

BEGIN { x=1 }
{
 if ($1 == "MATH") {
        min=max=$2;
        for ( i=0; i<=NF; i++) {
                min = (min < $i ? min : $i)
                max = (max > $i ? max : $i)
        }
 }

}

END { print "max a value is ",max," min a value is ",min }

谢谢!

解决方法

代码可以展示您想要的概念:

awk '$1!="MATH"{next}1;!i++{min=$2;max=$2;}{for(j=2;j<=NF;++j){min=(min<$j)?min:$j;max=(max>$j)?max:$j}}END{printf "Max value is %.2f. Min value is %.2f.\n",min}' file

输出

MATH      12.3    -0.42   5.5
MATH      3.32    2.43    9.42
MATH      3.91    -1.56   7.22
Max value is 12.30. Min value is -1.56.

删除1以禁止消息:

awk '$1!="MATH"{next};...

脚本版本:

#!/usr/bin/awk

$1 != "MATH" {
    # Move to next record if not about "MATH".
    next
}
!i++ {
    # Only does this on first match.
    min = $2; max = $2
}
{
    for (j = 2; j <= NF; ++j) {
        min = (min < $j) ? min : $j
        max = (max > $j) ? max : $j
    }
}
END {
    printf "Max value is %.2f. Min value is %.2f.\n",min
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐