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

请求实现基于指定大小分割.csv文件的Shell脚本方案

按指定大小分割大CSV文件的Shell脚本方案

刚好之前处理过类似的大CSV分割需求,给你一个经过验证的Shell脚本方案,不仅能按指定大小分割,还能保证每个输出文件都带CSV表头,避免数据无法直接使用的问题。

完整脚本

#!/bin/bash

# 配置参数
SOURCE_FILE="location.csv"
OUTPUT_PREFIX="location_"
# 设置每个分割文件的大小,支持K/M/G等单位(这里设为2G)
FILE_SIZE="2G"

# 检查源文件是否存在
if [ ! -f "$SOURCE_FILE" ]; then
    echo "错误:源文件 $SOURCE_FILE 不存在!"
    exit 1
fi

# 提取CSV表头(第一行)
HEADER=$(head -n 1 "$SOURCE_FILE")

# 创建临时目录存放分割后的无表头文件
TMP_DIR=$(mktemp -d)
echo "使用临时目录:$TMP_DIR"

# 分割源文件(跳过表头,按指定大小分割)
tail -n +2 "$SOURCE_FILE" | split -d -b "$FILE_SIZE" - "$TMP_DIR/${OUTPUT_PREFIX}"

# 给每个分割后的文件添加表头,并重命名为最终的.csv文件
COUNT=1
for TMP_FILE in "$TMP_DIR"/${OUTPUT_PREFIX}*; do
    if [ -f "$TMP_FILE" ]; then
        # 先写入表头,再追加分割的数据
        echo "$HEADER" > "${OUTPUT_PREFIX}${COUNT}.csv"
        cat "$TMP_FILE" >> "${OUTPUT_PREFIX}${COUNT}.csv"
        echo "已生成文件:${OUTPUT_PREFIX}${COUNT}.csv"
        ((COUNT++))
    fi
done

# 清理临时目录
rm -rf "$TMP_DIR"
echo "分割完成,共生成 $((COUNT-1)) 个文件"

脚本关键说明

  • 表头处理:CSV文件的表头是核心信息,直接用split会导致只有第一个文件带表头,后面的文件数据无意义。脚本先提取表头,再分割数据部分,最后给每个输出文件追加表头。
  • 分割逻辑:用tail -n +2跳过源文件的第一行(表头),然后通过split -d -b "$FILE_SIZE"按指定大小分割,-d参数让分割后的临时文件使用数字后缀(00、01...)。
  • 临时目录:用mktemp -d创建安全的临时目录,避免分割过程中污染当前工作目录,执行完成后自动清理。
  • 参数灵活:你可以修改FILE_SIZE变量来调整每个分割文件的大小,比如1G、500M都支持,完全适配你的需求。

使用步骤

  1. 将上述脚本保存为split_csv.sh。
  2. 给脚本添加执行权限:chmod +x split_csv.sh。
  3. 确保location.csv和脚本在同一目录,或者修改SOURCE_FILE变量为文件的绝对路径。
  4. 运行脚本:./split_csv.sh。

执行完成后,你就会得到location_1.csv到location_5.csv共5个2G左右的文件,每个文件都包含完整的CSV表头和对应的数据。

内容的提问来源于stack exchange,提问作者Madhankkumar S A

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:11:59