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

Print min and max with awk

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

假设我有一个文件

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

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

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

但我得到的结果是:

min: max: 2345

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

BEGIN {} 块在第一行之前处理,因此 </code> 未定义。</p> <pre><code>$ cat file a 14 a 34 a 234 a 2345 a 1 a 24 $ awk 'NR == 1 { min = max = ; next } > max { max = } < min { min = } END { print "min: " min ", max: " max }' file min: 1, max: 2345

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

对于有符号整数值,简单地为 32 位有符号整数选择 min/max 值是合理的。例如,您可以这样做:

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

例子Use/Output

根据 file 中的数据,您将获得:

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

这正是您要找的。