You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWK需求:按第一列分组保留第二列最大值的所有行(含重复行)

AWK按分组保留第二列最大值的所有重复行解决方案

需求说明

按第一列分组,保留每组中第二列数值最大的所有行(包括重复的最大值行)。

输入示例

a   55
a   66
a   130
b   88
b   99
b   99
c   110
c   130
c   130

期望输出

a   130
b   99
b   99
c   130
c   130

正确AWK实现

通过两次遍历文件的方式,先统计每组最大值,再筛选输出符合条件的行:

awk 'NR == FNR {
    # 第一次遍历:记录每个分组的第二列最大值
    if ($2 > max[$1]) {
        max[$1] = $2
    }
    next
}
# 第二次遍历:输出当前行第二列等于对应分组最大值的所有行
$2 == max[$1]' input.txt input.txt

代码解释

  1. 第一次遍历(NR == FNR):NR是全局总行数,FNR是当前文件的行数。当两者相等时,处理第一个输入文件,遍历所有行并更新数组max,存储每个分组($1)对应的第二列最大值。
  2. next:跳过后续语句,确保第一次遍历仅完成最大值统计工作。
  3. 第二次遍历:处理第二个输入文件,检查当前行的第二列是否等于对应分组的最大值,符合条件则输出整行,自然保留所有重复的最大值行。

原代码问题分析

  • 第一段代码:使用全局变量max统计最大值,未按第一列分组,最终仅保留全局最大的行,不符合分组需求。
  • 第二段代码:用row[$1]存储行,但仅在遇到更大值时更新,相同最大值的后续行无法被记录,导致丢失重复的最大值行。

内容的提问来源于stack exchange,提问作者SWK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 04:15:50