Linux下按大小拆分大CSV文件并为所有拆分文件保留表头
拆分大CSV文件并为所有拆分文件保留3行表头
操作步骤
1. 提取原文件的3行表头
先将原CSV的前3行表头保存到临时文件:
head -n 3 TEST-REPORT-YYYYMMDDHHMMSS.CSV > header.csv
2. 拆分原文件的数据部分(跳过表头)
只处理原文件第4行及以后的内容,按5MB大小拆分生成临时文件:
tail -n +4 TEST-REPORT-YYYYMMDDHHMMSS.CSV | split -d -a3 -b 5M --additional-suffix=.csv - temp_part_
参数说明:
tail -n +4:跳过前3行表头,仅读取数据内容split -d -a3 -b 5M:按5MB拆分,生成带三位数字后缀的文件(001、002...)--additional-suffix=.csv:为拆分文件添加.csv后缀-:指定从标准输入读取数据(即tail输出的内容)temp_part_:临时拆分文件的前缀
3. 合并表头并重命名为目标格式
通过循环将表头合并到每个临时拆分文件,并重命名为你需要的格式:
# 提取原文件名中的日期时间段 date_part=$(echo "TEST-REPORT-YYYYMMDDHHMMSS.CSV" | cut -d'-' -f3 | sed 's/.CSV//') # 遍历所有临时拆分文件 for part in temp_part_*.csv; do # 提取序列号(去掉前导零,得到1、2、3...) seq_num=$(echo "$part" | sed 's/temp_part_//; s/.csv//' | awk '{print int($0)}') # 合并表头与数据,生成最终文件 cat header.csv "$part" > "TEST-REPORT-$seq_num-$date_part.CSV" # 删除临时文件 rm "$part" done # 清理临时表头文件 rm header.csv
可选调整
如果需要序列号保留三位(如001、002),只需修改提取序列号的代码:
seq_num=$(echo "$part" | sed 's/temp_part_//; s/.csv//')
最终文件名会变成TEST-REPORT-001-YYYYMMDDHHMMSS.CSV这类格式。
内容的提问来源于stack exchange,提问作者Ashok
相关产品推荐
相关产品推荐

