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

使用AWK处理130亿行大CSV按复合键去重出现内存溢出如何解决

问题原因

你原来使用的awk -F, '!seen[$1,$2]++'命令需要在内存中维护一个哈希表存储所有已出现过的tag+time复合键,130亿行数据对应的哈希表内存占用会超过200GB,远高于你设备的128GB内存上限,因此触发OOM被系统终止。

可行解决方案

核心逻辑是先通过排序让相同tag+time的行连续排列,awk仅需要对比相邻行的复合键即可完成去重,全程内存占用不到100MB,完全不会出现内存不足问题。
具体执行步骤如下:

  1. 先导出表头到结果文件
head -n 1 data.csv > data_UNIQUE.csv
  1. 对数据行排序后去重,结果追加到目标文件
tail -n +2 data.csv | sort -t ',' -k1,1 -k2,2 --buffer-size=100G --parallel=20 | awk -F ',' '{cur = $1","$2} cur != prev {print; prev = cur}' >> data_UNIQUE.csv

参数说明

  • tail -n +2:跳过原文件的表头行,仅处理数据内容
  • sort命令参数:
    • -t ',':指定字段分隔符为逗号
    • -k1,1 -k2,2:优先按第一列tag排序,再按第二列time排序,保证相同复合键的行连续出现
    • --buffer-size=100G:分配100GB内存作为排序缓存,充分利用你的内存资源同时预留足够余量避免OOM
    • --parallel=20:开启20线程并行排序,匹配你i9-10900K的20线程硬件规格,大幅提升排序速度
  • awk命令逻辑:仅存储上一行的复合键,当前行复合键与上一行不一致时就输出,内存占用极低

注意事项

  • 请确保sort临时文件存储路径(默认是/tmp)的剩余可用空间大于800GB,你的2TB NVME硬盘完全满足需求,排序完成后临时文件会自动清理
  • 该方案适配你提供的CSV格式(字段内无逗号),可以得到符合预期的去重结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 20:54:04