如何使用awk打印出第二列最大值所在的行?
提取第二列最大值对应的整行
你的问题出在只记录了第二列的最大值,但没保存该值对应的行信息。awk处理完所有行后,$1、$0这些变量会保留最后一行的内容,所以你原来的代码会把最后一行的第一列和最大概率值拼在一起输出。
不需要用数组,只需要在遍历每行时,同时记录当前最大概率值以及对应的整行(或者对应的第一列和第二列)即可。
方法一:保存整行内容
BEGIN {max_prob = 0} { if ($2 > max_prob) { max_prob = $2 target_line = $0 } } END {print target_line}
方法二:分别保存两列的值
如果只需要输出指定的两列(保持格式),也可以单独记录第一列和第二列的最大值:
BEGIN {max_p = 0} $2 > max_p {max_p = $2; max_d = $1} END {print max_d, max_p}
特殊情况处理
如果存在多行第二列值相同且都是最大值的情况:
- 想保留第一个出现的行,保持上面的条件
$2 > max_p即可(只有遇到更大的值才更新) - 想保留最后一个出现的行,把条件改成
$2 >= max_p
内容的提问来源于stack exchange,提问作者ChemistryCoding
相关产品推荐
相关产品推荐

