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

如何在Bash中拆分带表头的大型*.csv文件?

问题分析与解决

错误原因很明确:你在输出文件名里直接使用了带完整路径的${FILENAME},导致生成的文件名变成part-1-/home/.../my_file.csv.csv,系统无法识别这种包含斜杠的文件名格式,因此报错“不存在该文件或目录”。

修正后的脚本

FILENAME=/home/cnf/domains/cnf.com.pl/public_html/sklep/dropshipping-pliki/products-files/my_file.csv
# 提取纯文件名,剥离完整路径
MY_FILE=$(basename ${FILENAME})
HDR=$(head -1 ${FILENAME})
split -l 40000 ${FILENAME} xyz
n=1
for f in xyz*
do
    OUTPUT_FILE="part-${n}-${MY_FILE}"
    if [[ ${n} -ne 1 ]]; then
        echo "${HDR}" > ${OUTPUT_FILE}
    fi
    cat ${f} >> ${OUTPUT_FILE}
    rm ${f}
    ((n++))
done

关键修改点

  • 用basename命令提取FILENAME的纯文件名(比如my_file.csv),避免把完整路径塞进输出文件名。
  • 新增OUTPUT_FILE变量统一管理输出文件名,提升脚本可读性。
  • 给echo "${HDR}"加上双引号,防止表头中的特殊字符(如空格、逗号)被Shell拆分。

额外优化建议

  • 若希望拆分后的文件和原文件同目录,可添加目录路径前缀:
    FILE_DIR=$(dirname ${FILENAME})
    OUTPUT_FILE="${FILE_DIR}/part-${n}-${MY_FILE}"
    
  • 使用split -d参数生成数字后缀的临时拆分文件(如xyz00、xyz01),比默认的字母后缀更直观。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 22:31:18