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

Linux下基于行重复次数对TXT文件进行排序与拆分

按行重复次数拆分大TXT文件的实现方案

方法一:Python脚本(跨平台,适配大文件)

针对3GB级别的大文件,必须采用逐行处理逻辑避免内存溢出,核心分两步执行:

  1. 统计每行重复次数:首次遍历文件,用字典记录每行内容的出现频次
  2. 按频次拆分写入:再次遍历原文件,根据每行对应的频次,将内容追加到对应输出文件

示例代码

import os

# 定义输出文件映射关系
output_map = {
    1: "1instance.txt",
    2: "2instances.txt",
    3: "3instances.txt"
}

# 清空已存在的输出文件,避免旧内容干扰
for file_path in output_map.values():
    if os.path.exists(file_path):
        os.remove(file_path)

# 第一步:统计每行出现次数
line_counter = {}
with open("large_file.txt", "r", encoding="utf-8") as src_file:
    for line in src_file:
        # 若需要忽略首尾空格(如"Mary "和"Mary"视为同一行),替换为 line.strip()
        line_key = line
        line_counter[line_key] = line_counter.get(line_key, 0) + 1

# 第二步:按频次拆分写入文件
with open("large_file.txt", "r", encoding="utf-8") as src_file:
    for line in src_file:
        line_key = line
        count = line_counter[line_key]
        if count in output_map:
            with open(output_map[count], "a", encoding="utf-8") as out_file:
                out_file.write(line)

注意事项

  • 若需统一行首尾空白的判定规则,修改line_key的赋值逻辑即可
  • 脚本全程逐行读写,内存占用极低,适配大文件场景

方法二:Shell命令(Linux/Unix环境)

利用系统基础命令组合,快速完成统计与拆分:

# 第一步:统计每行重复次数并生成临时统计文件
awk '{print $0}' large_file.txt | sort | uniq -c > temp_counts.txt

# 提取重复3次的行并写入目标文件
grep "^ *3 " temp_counts.txt | sed 's/^ *3 //' | while read line; do grep -xF "$line" large_file.txt; done > 3instances.txt

# 提取重复2次的行并写入目标文件
grep "^ *2 " temp_counts.txt | sed 's/^ *2 //' | while read line; do grep -xF "$line" large_file.txt; done > 2instances.txt

# 提取重复1次的行并写入目标文件
grep "^ *1 " temp_counts.txt | sed 's/^ *1 //' | while read line; do grep -xF "$line" large_file.txt; done > 1instance.txt

# 清理临时文件
rm temp_counts.txt

说明

  • sort | uniq -c 完成行内容的频次统计
  • grep -xF 确保整行完全匹配,避免部分匹配导致的错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 23:05:21