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

Linux中基于第二列重复值规则筛选数据行的方法求助

解决方案:分组筛选数据集的两种实现方式

这里有两个实用的方案帮你完成需求,分别适合Python脚本场景和命令行快速处理场景:

方案一:用Python Pandas库(推荐,适合复杂数据扩展)

Pandas对这类分组、筛选、截取操作的支持非常友好,步骤清晰易维护:

1. 先整理输入数据(方便处理)

把你的输入按每行一条记录格式化:

7466655 6974128 1 -0.5369 25.79
7466657 6974128 1 1.2966 80.20
7466659 6974128 1 1.5637 25.79
7466660 6974128 1 -0.3545 25.79
7466661 6974128 1 2.4080 25.79
7466663 6974128 1 3.3537 25.79
7466664 6974128 1 0.7214 37.94
7466793 6974080 1 -0.7481 26.28
7466791 6974080 1 -0.7424 26.28
7466790 6974080 1 -0.7224 26.28
8069261 7466657 1 -3.8792 25.95
8069264 7466657 1 7.3225 25.95
8069266 7466657 1 1.4466 25.95
8069365 7466009 1 3.4094 26.26
8069366 7466009 1 6.7698 26.26
8069367 7466009 1 0.0093 26.26
8069370 7466009 1 -4.9916 26.26
8069382 7466009 1 -2.7491 26.26
8069384 7466009 1 -4.0390 26.26
8089183 7466115 1 -3.0163 26.35

2. 编写Python代码

先确保安装了Pandas:

pip install pandas

然后运行以下脚本:

import pandas as pd

# 读取数据(如果是文件,替换成pd.read_csv('input.txt', sep=' ', header=None))
raw_data = """7466655 6974128 1 -0.5369 25.79
7466657 6974128 1 1.2966 80.20
7466659 6974128 1 1.5637 25.79
7466660 6974128 1 -0.3545 25.79
7466661 6974128 1 2.4080 25.79
7466663 6974128 1 3.3537 25.79
7466664 6974128 1 0.7214 37.94
7466793 6974080 1 -0.7481 26.28
7466791 6974080 1 -0.7424 26.28
7466790 6974080 1 -0.7224 26.28
8069261 7466657 1 -3.8792 25.95
8069264 7466657 1 7.3225 25.95
8069266 7466657 1 1.4466 25.95
8069365 7466009 1 3.4094 26.26
8069366 7466009 1 6.7698 26.26
8069367 7466009 1 0.0093 26.26
8069370 7466009 1 -4.9916 26.26
8069382 7466009 1 -2.7491 26.26
8069384 7466009 1 -4.0390 26.26
8089183 7466115 1 -3.0163 26.35"""

# 转换为DataFrame格式
df = pd.DataFrame([row.split() for row in raw_data.split('\n')])

# 按第二列分组,筛选出重复次数≥5的组
valid_groups = df.groupby(1).filter(lambda x: len(x) >=5)[1].unique()

# 保留符合条件的组,并每个组只取前5行
result = df[df[1].isin(valid_groups)].groupby(1).head(5)

# 输出和期望格式一致的结果
print('\n'.join([' '.join(row) for row in result.values]))

3. 运行结果

执行后会输出你想要的内容:

7466655 6974128 1 -0.5369 25.79
7466657 6974128 1 1.2966 80.20
7466659 6974128 1 1.5637 25.79
7466660 6974128 1 -0.3545 25.79
7466661 6974128 1 2.4080 25.79
8069365 7466009 1 3.4094 26.26
8069366 7466009 1 6.7698 26.26
8069367 7466009 1 0.0093 26.26
8069370 7466009 1 -4.9916 26.26
8069382 7466009 1 -2.7491 26.26

方案二:用Awk命令行工具(适合快速处理文本文件)

如果习惯用命令行,Awk可以一行命令搞定,不需要写脚本:

  1. 把你的输入数据保存为input.txt
  2. 运行以下命令:
awk '{
    count[$2]++
    line[$2, count[$2]] = $0
}
END {
    for (key in count) {
        if (count[key] >= 5) {
            for (i=1; i<=5; i++) {
                print line[key, i]
            }
        }
    }
}' input.txt

执行后直接输出符合要求的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:56:53