How to Split a Big CSV Into Smaller Files by Row Count (Honestly)
- Our sheet splitter splits a multi-tab Excel file by tab — it does NOT split a single CSV into row-count chunks. Honest about that.
- For row-count CSV splitting, best free options: the
splitcommand-line tool (built-in on Mac/Linux), PowerShell on Windows, or a 5-line Python script. - Hybrid workflow: use our tool to convert XLSX→CSVs (one per sheet), then use
splitfor further row-count chunking.
Table of Contents
Two different operations get called "splitting a spreadsheet": splitting a multi-tab workbook into per-tab files (what our sheet splitter does), and splitting one big CSV into smaller row-count chunks (which it does NOT do). Many keyword searches for "split CSV into multiple files" want the second. This post is the honest answer: here's what our tool does, here's what it can't do, and here's the free way to do the row-count thing.
No vendor hype, no feature padding. Just the tools that actually work.
The Two Different "Splits" Keep Getting Confused
| Operation | Input | Output | Our tool? |
|---|---|---|---|
| Split workbook by tab | Multi-sheet .xlsx | One file per tab | Yes |
| Split CSV by row count | One big CSV | Multiple CSVs with N rows each | No |
| Split CSV by column value | One CSV | One file per unique value | No |
| Split XLSX by column value | One-sheet xlsx | One file per value | No |
Only the first is what our tool does. The other three need different approaches.
The Built-In split Command (Mac and Linux)
Every Mac and Linux machine has a split command. Splits any file by line count:
split -l 1000 bigfile.csv chunk_
Produces chunk_aa, chunk_ab, chunk_ac, etc., each with 1,000 lines. Caveat: the header row lives only in the first chunk. To preserve the header in every chunk:
head -1 bigfile.csv > header.csv
tail -n +2 bigfile.csv | split -l 1000 - chunk_
for f in chunk_*; do cat header.csv $f > $f.csv && rm $f; done
rm header.csv
More verbose, but gives you headers in every output file. Runs on any 1 GB CSV in seconds.
PowerShell on Windows
Windows users can do the same with PowerShell:
$header = Get-Content bigfile.csv -First 1
$i = 0; $chunk = 0; $lines = @()
Get-Content bigfile.csv | Select-Object -Skip 1 | ForEach-Object {
$lines += $_
$i++
if ($i -ge 1000) {
@($header) + $lines | Set-Content "chunk_$chunk.csv"
$chunk++; $i = 0; $lines = @()
}
}
if ($lines.Count -gt 0) {
@($header) + $lines | Set-Content "chunk_$chunk.csv"
}
Preserves the header in every chunk. Run from any PowerShell prompt.
Sell Custom Apparel — We Handle Printing & Free ShippingPython (Cross-Platform, Cleanest for Complex Rules)
When the row-count split has additional rules (e.g., "don't split in the middle of an order group," "keep related rows together"), Python is the cleaner tool:
import pandas as pd
df = pd.read_csv('bigfile.csv')
chunk_size = 1000
for i in range(0, len(df), chunk_size):
df.iloc[i:i+chunk_size].to_csv(f'chunk_{i//chunk_size}.csv', index=False)
One install (pip install pandas) and you have a scriptable tool that handles arbitrary split logic. Headers are included in every file automatically.
The Hybrid Workflow: Both Tools in Sequence
If your starting point is a multi-sheet .xlsx and you need row-count splits of the per-sheet CSVs:
- Drop the .xlsx into our sheet splitter.
- Click "Download All as CSVs." You now have one CSV per original sheet.
- For each CSV that's too big, run
split(Mac/Linux) or PowerShell (Windows) to chunk by row count. - Result: each original sheet becomes multiple CSV chunks, each with N rows and a header.
This combines our tool's strength (multi-tab splitting) with the command line's strength (row-count chunking). Neither tool alone does both.
Why Row-Count Splitting Comes Up
- Import tools with row limits. Many CRMs and e-commerce platforms cap imports at 50K or 100K rows. A 500K-row master needs pre-splitting.
- Parallel processing. Feeding 10 CSVs to 10 workers in parallel is faster than one file to one worker.
- Git-sized chunks. CSVs over ~100 MB become awkward to track in Git. Chunking makes them manageable.
- Email attachments. Some mail servers cap attachments at 10 MB or 25 MB. Chunking makes big exports emailable.
- Spreadsheet software limits. Excel caps at ~1M rows per sheet. CSVs with more rows can't be opened in Excel without splitting first.
Use the Right Tool for Each Split
Multi-tab workbook? Use our splitter. Row-count chunks? Use split / PowerShell / Python.
Open Free Sheet SplitterFrequently Asked Questions
Will you add row-count splitting to this tool?
Possibly. For now, the honest answer is: use the command line or Python. They're faster and more reliable than a web UI for this specific operation.
Is there an online tool that does both?
Some paid products do. For free options, the command-line + our tool combo covers most workflows.
What if my big file is already CSV, not Excel?
Skip our tool and go straight to split / PowerShell / Python. Our tool takes .xlsx input.
Can Excel split a big CSV?
Excel can open CSVs up to ~1M rows. You can then manually copy row ranges into new sheets and save. For anything bigger or automated, the command-line route is faster.
What about Alteryx or Knime?
Both handle row-count splitting cleanly in GUI workflows. Paid (Alteryx) or complex (Knime) for occasional use; great for recurring ETL pipelines.

