如何用Shell命令/脚本或Google Sheets按每100行拆分CSV文件?
两种方案实现CSV文件按行数拆分
不管你是明确知道总行数,还是不确定具体行数,下面两种方案都能帮你把CSV拆分成每100行一个文件(最后一个文件自动存放剩余行):
一、Shell命令/脚本方案
这个方案适合在Linux/macOS终端、Windows WSL环境下操作,处理大文件效率拉满,完全不需要手动干预。
1. 已知总行数(比如你的333行案例)
直接用split命令就行,它是专门用来拆分文件的工具:
split -l 100 --numeric-suffixes=1 --additional-suffix=.csv longlist.csv split_
参数解释:
-l 100:指定每100行拆成一个文件--numeric-suffixes=1:拆分后的文件后缀从1开始计数(比如split_1.csv、split_2.csv)--additional-suffix=.csv:给拆分后的文件自动加上.csv后缀- 最后两个参数分别是源文件名和输出文件的前缀
执行后你会得到:
split_1.csv(1-100行)split_2.csv(101-200行)split_3.csv(201-300行)split_4.csv(301-333行)
2. 未知总行数
上面的split命令完全通用,不管你的源文件有多少行,它都会自动把最后剩余的行放到最后一个文件里,直接跑上面的命令就好。
如果你的CSV有表头需要保留,可以用下面的脚本先提取表头,再拆分内容,最后把表头合并到每个拆分文件中:
# 提取表头到临时文件 head -n 1 longlist.csv > header.csv # 拆分除表头外的所有内容 tail -n +2 longlist.csv | split -l 100 --numeric-suffixes=1 --additional-suffix=.csv - split_ # 给每个拆分文件添加表头 for file in split_*.csv; do cat header.csv "$file" > temp.csv && mv temp.csv "$file" done # 删除临时表头文件 rm header.csv
二、Google Sheets可视化方案
如果习惯用图形化工具操作,Google Sheets也能轻松搞定,步骤如下:
- 打开Google Sheets,导入你的
longlist.csv(点击「文件→导入→上传」选择文件) - 假设数据从A1单元格开始(有表头的话A1就是表头行,没有则直接是第一行数据)
- 创建第一个拆分表:
- 点击底部加号新建工作表,命名为
Split1 - 在A1单元格输入公式:
=INDEX(longlist!A:D,ROW(A1),COLUMN(A1)),向右拉到D列,再向下拉到第100行,就能拿到前100行数据
- 点击底部加号新建工作表,命名为
- 创建第二个拆分表:
- 新建工作表
Split2,A1单元格输入:=INDEX(longlist!A:D,ROW(A1)+100,COLUMN(A1)),同样拉到D100,拿到101-200行
- 新建工作表
- 第三个拆分表
Split3:- A1公式:
=INDEX(longlist!A:D,ROW(A1)+200,COLUMN(A1)),拉到D100,拿到201-300行
- A1公式:
- 最后一个拆分表
Split4:- A1公式:
=INDEX(longlist!A:D,ROW(A1)+300,COLUMN(A1)),拉到D列直到出现空行,剩下的就是31-33行数据
- A1公式:
- 导出每个工作表为CSV:进入对应工作表,点击右上角「文件→下载→逗号分隔值(.csv)」即可
如果总行数不确定,可以先在源表用=COUNTA(A:A)算出总行数,再根据总数计算需要的拆分表数量,公式里的偏移量改成(表序号-1)*100就行(比如第n个表的偏移量是(n-1)*100)。
内容的提问来源于stack exchange,提问作者citizen
相关产品推荐
相关产品推荐

