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

如何按重复分隔符拆分大文本文件(而非按行数或精确大小)

基于Unix工具的文件拆分方案

核心思路

用awk将All.asc以=======分隔符识别为独立记录(对应原单个文本文件内容+分隔符),累加记录大小,当总大小接近1MB时切换到新输出文件,确保单个原文件内容不会被拆分。

具体实现命令

拆分脚本代码

将以下内容保存为split.awk文件:

BEGIN {
    RS="\r?\n=======\r?\n"  # 适配Windows/DOS的CRLF换行,精准匹配分隔符行
    OFS="\r\n"               # 保持输出为CRLF格式
    file_num=1
    current_size=0
    target_size=1024*1024    # 1MB阈值,可按需微调
    out_file=sprintf("split_%02d.asc", file_num)
}

{
    # 计算当前记录的总大小(含后续要追加的分隔符)
    record_size=length($0) + length(RS)
    # 若加入当前记录会超阈值且已有内容,切换新文件
    if (current_size + record_size > target_size && current_size > 0) {
        close(out_file)
        file_num++
        out_file=sprintf("split_%02d.asc", file_num)
        current_size=0
    }
    # 写入当前记录
    print $0 > out_file
    # 非最后一条记录,追加分隔符
    if (NR != FNR) {
        print "=======" > out_file
    }
    current_size += record_size
}

END {
    close(out_file)
}

执行方式

在命令行中运行:

awk -f split.awk D:\@temp\All.asc

细节说明

  • 适配Windows/DOS格式的CRLF换行,避免因换行符差异导致分隔符匹配失败
  • 输出文件按split_01.asc、split_02.asc...命名,保证顺序清晰
  • 自动跳过最后一条记录后的多余分隔符,还原原文件的结构逻辑
  • 可调整target_size的值(比如改为1000000),更贴近"约1MB"的需求

可选优化方案

如果需要更精准的大小控制,可先预统计所有记录大小再批量写入:

BEGIN {
    RS="\r?\n=======\r?\n"
    OFS="\r\n"
}

{
    records[NR] = $0
    sizes[NR] = length($0) + length(RS)
}

END {
    file_num=1
    current_size=0
    target_size=1024*1024
    out_file=sprintf("split_%02d.asc", file_num)
    for (i=1; i<=NR; i++) {
        if (current_size + sizes[i] > target_size && current_size >0) {
            close(out_file)
            file_num++
            out_file=sprintf("split_%02d.asc", file_num)
            current_size=0
        }
        print records[i] > out_file
        if (i != NR) {
            print "=======" > out_file
        }
        current_size += sizes[i]
    }
    close(out_file)
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 15:15:38