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可以一行命令搞定,不需要写脚本:
- 把你的输入数据保存为
input.txt - 运行以下命令:
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
相关产品推荐
相关产品推荐

