为何比较负数时该awk命令无法正常工作?
问题原因与解决方法
问题根源
你的awk命令里的max变量没有初始化,awk中未赋值的变量默认值是0。当第6字段全是负数时,所有负数都小于0,导致$6>max这个条件永远不成立,代码块里的max=$6和line=$0根本不会执行,最后END块打印的line是空字符串,所以返回空行。
修正方案
方案1:初始化max为极小值
直接在BEGIN块里把max设为负无穷,这样任何负数都会比它大:
awk 'BEGIN{max=-inf} ($6>max) && ($4!="AZ") {max=$6; line=$0} END{print line}' foo.txt
方案2:先处理第一行有效数据
如果你的文件第一行就是有效数据(且第4字段不是AZ),可以先给max和line赋初始值,再处理后续行:
awk 'NR==1 && $4!="AZ"{max=$6; line=$0} NR>1 && ($6>max) && ($4!="AZ") {max=$6; line=$0} END{print line}' foo.txt
内容的提问来源于stack exchange,提问作者Muhammad Ahmad
相关产品推荐
相关产品推荐

