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

如何合并指定列重复项并提取其他列的最小/最大值?

解决方案

方法一:使用awk命令行工具(高效处理大文本)

awk是处理结构化文本的利器,适合快速处理数千条数据:

awk '{
    key = $3
    if (!min[key] || $1 < min[key]) min[key] = $1
    if (!max[key] || $2 > max[key]) max[key] = $2
}
END {
    for (k in min) printf "%s\t%s\t%s\n", min[k], max[k], k
}' input.txt > output.txt

说明:

  • key = $3:以第三列的值作为分组标识
  • 遍历每一行时,更新对应分组的第一列最小值(min[key])和第二列最大值(max[key])
  • END块在所有行处理完成后,遍历所有分组,输出结果
  • 将input.txt替换为你的源文件名,output.txt是处理后的结果文件

方法二:使用Python脚本(灵活易扩展)

如果需要更定制化的处理,或者不熟悉命令行,可以用Python脚本:

from collections import defaultdict

# 初始化存储结构,默认每个分组的min为无穷大,max为负无穷大
group_data = defaultdict(lambda: {"min_val": float("inf"), "max_val": -float("inf")})

# 读取源文件
with open("input.txt", "r") as infile:
    for line in infile:
        stripped_line = line.strip()
        if not stripped_line:
            continue
        # 分割行内容为三列
        parts = stripped_line.split()
        if len(parts) != 3:
            continue
        val1 = float(parts[0])
        val2 = float(parts[1])
        group_key = parts[2]
        
        # 更新当前分组的最小值和最大值
        if val1 < group_data[group_key]["min_val"]:
            group_data[group_key]["min_val"] = val1
        if val2 > group_data[group_key]["max_val"]:
            group_data[group_key]["max_val"] = val2

# 写入结果文件
with open("output.txt", "w") as outfile:
    for key in group_data:
        # 保留两位小数,匹配原文件格式
        outfile.write(f"{group_data[key]['min_val']:.2f}\t{group_data[key]['max_val']:.2f}\t{key}\n")

说明:

  • 使用defaultdict自动管理每个分组的最小/最大值
  • 处理每行时跳过空行和格式异常的行
  • 输出时保留两位小数,和原数据格式一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 19:57:38