If you work with CSV files from the terminal, you've probably hit one of two annoying moments: a file too big to open in Excel without your laptop fan spinning up, or a quick data cleanup that doesn't justify writing a whole Python script. Two free, open-source command-line tools solve these — but they solve different problems, and picking the wrong one means fighting the tool instead of your data.
The short version: csvlens is for looking at a CSV — scrolling, searching, filtering, exactly like the `less` pager you already use for logs. Miller is for changing a CSV — filtering rows, joining files, converting formats, the way `awk` and `sed` operate on plain text. One is a viewer, the other is a processor. Below is what each is actually good at, and where each one runs out of road.
csvlens — a `less` for spreadsheets
csvlens exists for a very specific moment: you have a CSV — maybe a few hundred megabytes, maybe multiple gigabytes — and you just want to see what's in it. Excel chokes or refuses to open it. Writing `pandas.read_csv().head()` in a scratch script feels like overkill for a 10-second check. csvlens opens the file instantly, in the terminal, and lets you scroll and search it the same way you'd page through a log file with `less`.
Under the hood it's a single Rust binary (installable via Homebrew, winget, Cargo, or your Linux/BSD package manager), with vim-style navigation (hjkl and arrow keys), regex search with highlighting, row/column/cell filtering, multiple selection modes, column freezing so headers stay visible while you scroll sideways, natural-language-aware sorting, and clipboard integration for pulling out a value. It auto-detects the delimiter, so semicolon-separated exports from European tools open just as cleanly as comma-separated ones. It's free, MIT-licensed, and has 3.9k GitHub stars with active maintenance.
What it won't do: csvlens is read-only by design. It doesn't edit cells, transform columns, join files, or convert formats — it's a viewer, full stop. If your actual task is reshaping the data rather than reading it, you'll open csvlens, confirm what you're looking at, then reach for something else anyway.
Pick csvlens if: you regularly get handed CSV exports too large for a spreadsheet app and just need to inspect, search, or spot-check them without ceremony.
Miller — awk and sed, but for structured data
Miller solves a different, older frustration. Classic Unix tools like `awk`, `sed`, and `cut` are fast and available everywhere, but they treat a CSV as raw text with no concept of column names — so a script built around "field 3" silently breaks the moment someone reorders the columns in the source export. You could reach for a Python + pandas script instead, but that means pulling in a Python environment and its dependencies just to filter a file.
Miller sits between those two options: a single, fast, dependency-free Go binary that understands CSV, TSV, JSON, and JSON Lines structurally, so you filter, sort, join, and aggregate using actual column names instead of fragile positional indexes. It converts between formats natively (CSV in, JSON out, no glue script required), and its streaming architecture processes files larger than available RAM using single-pass algorithms — genuinely useful for log post-processing or ETL jobs where the file won't fit in memory. It's mature: 10,000+ GitHub stars, commits as recently as this week, and full documentation at miller.readthedocs.io.
What it won't do: Miller has its own DSL (domain-specific language) for the more advanced operations, and that's a real learning curve if you're used to plain awk one-liners or pandas syntax. It's also not an exploratory-analysis environment — for genuinely digging through data interactively, pandas or R still give you more. And everything runs on a single machine; there's no distributed processing story if your "CSV" is actually a 200GB dataset spread across files.
Pick Miller if: you need to filter, reshape, join, or convert CSV/TSV/JSON data as part of a script or pipeline, and want to avoid spinning up Python for what's fundamentally a text-processing job.
How they actually compare
| csvlens | Miller | |
|---|---|---|
| What it's for | Browsing / inspecting a CSV | Filtering, reshaping, converting data |
| Closest classic-Unix analogy | less | awk + sed + join |
| Formats | CSV (auto-detects delimiter) | CSV, TSV, JSON, JSON Lines |
| Edits the file? | No — read-only viewer | Yes — filters, transforms, converts |
| Handles files bigger than RAM? | Yes, for viewing | Yes, streaming single-pass processing |
| Learning curve | Low — vim-style keys if you know `less` | Higher — has its own DSL for advanced use |
| Language / install | Rust binary — Homebrew, winget, Cargo | Go binary — zero runtime dependencies |
| Price | Free, open source (MIT) | Free, open source |
They're not really competitors — most people who need both will end up with both installed, the same way you keep `less` and `awk` around even though neither replaces the other. If you had to pick just one to start with: reach for csvlens first if your problem is "I can't even see what's in this file," and reach for Miller first if your problem is "I know what's in this file and I need it to look different."