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

如何在不加载全文件到内存下按索引范围拆分大CSV文件

解决方案:用Miller按索引范围拆分大CSV文件

核心思路

利用Miller的流式处理能力,按索引的百位区间(2000-2099、2100-2199…)分组拆分,同时为每个输出文件保留原表头,全程无需加载整个文件到内存。

步骤与命令

假设你的CSV第一列名为index(若实际列名不同,替换命令中的$index即可):

  1. 提取原文件表头
    先单独导出表头,后续每个拆分文件都需要:
head -n 1 large_file.csv > header.csv
  1. 用Miller拆分数据行
    跳过原文件表头,按索引区间分组输出到对应文件:
mlr --csv --headerless-csv-input skip 1 then split -f 'floor($index / 100) * 100' --output-file-pattern 'output_%d.csv' large_file.csv
  • --headerless-csv-input skip 1:跳过原文件的第一行表头,因为我们已单独提取
  • split -f 'floor($index / 100) * 100':通过计算将索引映射到区间起始值(如2005→2000、2199→2100),确保同一索引的行全部进入同一文件
  • --output-file-pattern 'output_%d.csv':指定输出文件名格式,比如2000-2099的行保存为output_2000.csv,2100-2199的保存为output_2100.csv,以此类推
  1. 为拆分文件添加表头
    将之前提取的表头写入每个拆分文件的开头:
for file in output_*.csv; do
  cat header.csv "$file" > temp.csv && mv temp.csv "$file"
done
  1. 清理临时文件
rm header.csv

为什么选Miller的split而非tee?

  • split动词专为按条件分组输出到不同文件设计,完全匹配你的需求,且不会向输出文件添加任何额外列
  • tee更多用于将同一输出复制到多个文件,无法实现按索引区间分流的逻辑

内容的提问来源于stack exchange,提问作者David Davíd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 20:36:03