如何用awk获取指定列最大值并输出对应其他列关联值
问题:获取指定列最大值及其关联列值
给定如下数据(保存为data.txt):
1 text1 1 1 5 2 text2 2 2 10 3 text3 3 3 15 4 text4 4 4 50 5 text5 5 5 25
原本可以用这段代码获取第5列的最大值:
BEGIN {a=0} {if ($5>0+a) a=$5} END{print a} data.txt
现在需要修改代码,同时获取该最大值对应的第2列内容,期望输出为:
50 text4
解决方案
只需要新增一个变量来保存最大值对应的第2列内容,修改后的代码如下:
BEGIN {a=0} {if ($5 > a) {a=$5; b=$2}} END{print a, b} data.txt
思路说明
- 新增变量
b,用来存储当前最大值对应的第2列文本 - 当遍历到某一行的第5列值大于当前记录的最大值
a时,同时更新最大值a和关联的第2列内容b - 遍历结束后,在
END块里同时打印最大值a和对应的第2列内容b
如果存在多行第5列值同为最大值的情况,上述代码会保留最后一次出现的关联列值;若想保留第一次出现的,只需把判断条件改为$5 >= a即可。
内容的提问来源于stack exchange,提问作者Diego
相关产品推荐
相关产品推荐

