gpt4 book ai didi

awk - 在 awk 中赋值前的变量评估

转载 作者:行者123 更新时间:2023-12-03 19:41:21 24 4
gpt4 key购买 nike

在以下 awk 语句中:

awk '$2 > maxrate {maxrate = $2; maxemp = $1} 
END {print "highest hourly rate:", maxrate, "for", maxemp}' pay.data
在以下数据上运行:
Beth 4.00 0
Dan 3.75 0
Kathy 4.00 10
Mark 5.00 20
Mary 5.50 22
Susie 4.25 18
怎么样 $2 > maxrate有效,因为它在分配给 $2 之前被评估?

最佳答案

来自 GNU awk manual

By default, variables are initialized to the empty string, which iszero if converted to a number. There is no need to explicitlyinitialize a variable in awk, which is what you would do in C and inmost other traditional languages.


这种通常适用于脚本语言的隐式方式非常舒适,但也为错误或困惑留下了空间。

例如,在这种情况下,您可以计算最大值,而无需初始化 max :
awk '$2 > max{max = $2} END{print "max:", max}' file
max: 5.50
但是如果你对 min 做同样的事情结果是空字符串,因为 min最初为零作为数字,作为字符串为空。
awk '$2 < min{min = $2} END{print "min:", min}' file
min:
还有 max如果所有值都为负,计算可能会失败。所以最好是第一次分配一些东西。
awk 'NR==1{min=$2; next} $2<min{min = $2} END{print "min:", min}' file
min: 3.75
这种方式应该适用于 minmax , 对于任何范围的数字。通常,在编写脚本时,我们必须考虑未定义和/或未初始化的变量将被初始化的所有可能情况。对于在获取值之前将对其进行测试的情况。

关于awk - 在 awk 中赋值前的变量评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64162033/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com