使用 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_MIN
、INT_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
这正是您要找的。
为什么这个 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_MIN
、INT_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
这正是您要找的。