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

CSV文件列数处理性能优化:13万行数据列数补全提速方案

处理大CSV文件:从龟速到飞一般的优化方案

哈哈,处理13万行的CSV文件时,用while read逐行循环慢到离谱太正常了——我之前碰过类似的场景,那种看着进度条龟速爬的感觉真的让人抓狂!

为什么原来的方法这么慢?

你最开始用的这段代码:

while read line; do 
    nr_columns=$(echo $line | awk -F'|' '{print NF}') 
    echo $line>> out 
done < input_file.csv

问题出在每行都要启动两个子进程:echo和awk。13万行的话,就是26万次进程创建与销毁,系统光是在进程切换上就耗掉了大部分时间,运行时间从10秒涨到3分钟完全不意外,哪怕换成tr也一样逃不过频繁子进程的开销。

最快的解决方案:用awk全程处理

你最终采用的awk方案才是正确的打开方式!awk本身就是为处理文本流设计的,全程单进程运行,没有额外的进程切换开销,处理大文件效率拉满。

再把你的代码整理得更清晰些:

awk -v separator="|" -v nr_fields=17 -F"|" '{
    if (NF < nr_fields) 
        print $0 separator 0;
    else 
        print $0
}' input_file.csv > outputfile

简单拆解下逻辑:

  • 用-v把分隔符(这里是|)和目标列数(17)传递给awk变量
  • -F"|"指定字段分隔符为|
  • 遍历每一行,判断当前列数NF是否小于目标列数:
    • 如果是,就输出原行内容+分隔符+0补全
    • 如果不是,直接输出原行

这种写法全程在awk内部完成所有逻辑,不需要调用任何外部命令,处理13万行数据基本就是秒级的事儿。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:56:39