首页 > 解决方案 > 在 awk 中打印最大值有什么问题

问题描述

我使用此脚本打印第二列的最大值:

awk 'BEGIN{a=   0}{if ($2>a) a=$2 fi} END{print a}' file

文件:

3830.52482 5.78305
3849.67744 7.10715
3868.92583 7.23076
3888.27046 7.67286
3907.71181 9.21546
3986.45416 11.24000
4006.38643 12.57840
4026.41837 12.39920
4046.55046 12.39390
4066.78321 12.17150
4087.11713 13.03400
4107.55271 12.83100
4128.09047 13.23370
4148.73093 13.40080
4169.47458 13.34160
4190.32196 12.83620
4211.27357 13.02260
4232.32993 12.27750
4253.49158 12.31420
4274.75904 11.57470
4296.13284 9.65358
4317.61350 10.84840
4339.20157 12.88430
4360.89757 13.45180
4382.70206 12.76190
4404.61557 13.58690
4426.63865 14.02720
4448.77184 14.49020

结果:

bash maximum.sh 
9.96591

但是第二列中有更多的数字。即使输入不包含它,我也得到了这个数字。

标签: awk

解决方案


awk 不是外壳,它本身是一种不同的语言,您在逻辑上做到了正确,只是语法fi不应该存在,请尝试:

awk 'BEGIN{a=0}{if($2>a){a=$2}} END{print a}' Input_file


或者您可以简单地使用如下条件运算符在第二个字段中设置获取最大值,如下所示:

awk '{a=$2>a?$2:a} END{print a}' Input_file

说明: OP 已经在正确的轨道上,如果当前行的第二个字段大于变量的值,则创建一个变量并检查每行的条件,然后将变量值分配给第二个字段,否则保持原样。然后在END该程序的部分打印变量值。


推荐阅读