shell处理超长excel表格文件数据(含小工具)

194 阅读1分钟
@MacBook-Pro 202412 % cd ~/Downloads

@MacBook-Pro Downloads % mkdir 文件夹名

@MacBook-Pro Downloads % cp 原始表文件名.csv tmp

@MacBook-Pro Downloads % cd 创建好的文件夹下

@MacBook-Pro tmp % split -l 1000000 原始表文件名.csv   
/*将文件按每100万条数据分割一次*/

@MacBook-Pro tmp % ls

原始表文件名.csv xac

xaa xad

xab

@MacBook-Pro tmp % ls -alhf

total 2962008

drwxr-xr-x 7 lihui staff 224B 1 8 16:58 .

drwx------@ 102 lihui staff 3.2K 1 8 16:58 ..

-rw-r--r--@ 1 lihui staff 713M 1 8 16:58 Google_20241201_20241231_结算报告_原始表.csv

-rw-r--r-- 1 lihui staff 217M 1 8 16:58 xaa

-rw-r--r-- 1 lihui staff 216M 1 8 16:58 xab

-rw-r--r-- 1 lihui staff 60M 1 8 16:58 xad

-rw-r--r-- 1 lihui staff 220M 1 8 16:58 xac

最后再把第一个文件xaa中的表头复制编辑到xab xac xad中,且修改四个拆分后的文件名后缀为.csv

可直接使用的拆分小工具 保存为.sh后缀文件即可直接使用:


# 检查命令行参数
if [ $# -ne 1 ]; then
    echo "Usage: $0 <source_file>"
    echo "Example: $0 large_file.csv"
    exit 1
fi

# 获取源文件名
source_file="$1"

# 检查源文件是否存在
if [ ! -f "$source_file" ]; then
    echo "Error: File '$source_file' not found!"
    exit 1
fi

# 获取文件名和后缀
filename=$(basename "$source_file")
extension="${filename##*.}"
filename_no_ext="${filename%.*}"

echo "Starting to split file: $source_file"

# 创建临时目录
tmp_dir="split_tmp_$$"
mkdir -p "$tmp_dir"

# 保存表头
head -n 1 "$source_file" > "$tmp_dir/header.txt"
echo "Header saved"

# 拆分文件(跳过表头)
tail -n +2 "$source_file" | split -l 1000000 -a 3 - "$tmp_dir/${filename_no_ext}_part_"
echo "File split completed"

# 为每个拆分后的文件添加表头并加上后缀
for file in "$tmp_dir/${filename_no_ext}_part_"*; do
    if [ -f "$file" ]; then
        output_file="$(basename "$file").${extension}"
        echo "Adding header to $output_file"
        cat "$tmp_dir/header.txt" "$file" > "$output_file"
    fi
done

# 清理临时文件和目录
rm -rf "$tmp_dir"

echo "Split complete! Files created with prefix: ${filename_no_ext}_part_ and suffix: .${extension}"
echo "Done!"

执行命令bash 工具名.sh 文件名.xlsx