繁体   English   中英

使用 awk 打印最小值和最大值

[英]Print min and max with awk

为什么这个 awk 脚本不起作用,我想通过只读取一次数据来打印输入的最小值和最大值。 我还想用数据的第一个值初始化 min 和 max 变量。

假设我有一个文件

a 14
a 34
a 234
a 2345
a 1
a 24

我正在使用 awk 打印最小值和最大值:

cat test.txt | awk 'BEGIN {min=$2; max=$2} {if ($2 < min) {min=$2}; if ($2 > max) {max=$2} } END {print "min: " min "max: " max}'

但我得到的结果是:

min: max: 2345

我不明白为什么 min 设置为空白?

BEGIN {}块在第一行之前处理,因此$2未定义。

$ cat file
a 14
a 34
a 234
a 2345
a 1
a 24
$ awk 'NR == 1  { min = max = $2; next }
       $2 > max { max = $2 }
       $2 < min { min = $2 }
       END      { print "min: " min ", max: " max }' file
min: 1, max: 2345

awk 中的所有数值都以浮点格式存储,并且没有与 C INT_MININT_MAX等价的值,因此您只需选择您希望处理的值范围并将max初始化为该范围内的最小可能值你想考虑,并min到你想考虑的范围内的最大可能值。

对于带符号的 integer 值,简单地为 32 位带符号的 integer 选择最小/最大值是合理的。 例如,您可以这样做:

 awk '
  BEGIN { min=2147483647; max=-2147483648 } 
  $2 > max { max=$2 } 
  $2 < min { min=$2 }
  END { print "max: ", max ORS "min: ", min }
' file

示例使用/输出

使用file中的数据,您将获得:

$ awk '
>   BEGIN { min=2147483647; max=-2147483648 }
>   $2 > max { max=$2 }
>   $2 < min { min=$2 }
>   END { print "max: ", max ORS "min: ", min }
> ' file
max:  2345
min:  1

这就是你要找的。

暂无
暂无

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

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