[英]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_MIN
和INT_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.