lens

May 31, 2026 · View on GitHub

Interactively view, search & filter tabular data files using the csvlens engine. Apart from CSV and its dialects, Arrow, Avro/IPC, Parquet, JSON array & JSONL formats are supported with the "polars" feature.

Table of Contents | Source: src/cmd/lens.rs | 🗃️🐻‍❄️🖥️

Description | Examples | Usage | Lens Options | Common Options

Description

Explore tabular data files interactively using the csvlens (https://github.com/YS-L/csvlens) engine.

If the polars feature is enabled, lens can browse tabular data in Arrow, Avro/IPC, Parquet, JSON (JSON Array) and JSONL files. It also automatically decompresses csv/tsv/tab/ssv files using the gz,zlib & zst compression formats (e.g. data.csv.gz, data.tsv.zlib, data.tab.gz & data.ssv.zst).

If the polars feature is not enabled, lens can only browse CSV dialects (CSV, TSV, Tab, SSV) and its snappy-compressed variants (CSV.sz, TSV.sz, Tab.sz & SSV.sz).

Press 'q' to exit. Press '?' for help.

See also https://github.com/dathere/qsv/wiki/Selection-and-Inspection#lens

Examples

Automatically choose delimiter based on the file extension

qsv lens data.csv // comma-separated
qsv lens data.tsv // Tab-separated
qsv lens data.tab // Tab-separated
qsv lens data.ssv // Semicolon-separated

custom delimiter

qsv lens --delimiter '|' data.csv

Auto-decompresses several compression formats:

qsv lens data.csv.sz // Snappy-compressed CSV
qsv lens data.tsv.sz // Snappy-compressed Tab-separated

additional compression formats below require polars feature

qsv lens data.csv.gz // Gzipped CSV
qsv lens data.tsv.zlib // Zlib-compressed Tab-separated
qsv lens data.tab.zst // Zstd-compressed Tab-separated
qsv lens data.ssv.zst // Zstd-compressed Semicolon-separated

Explore tabular data in other formats (if polars feature is enabled)

qsv lens data.parquet // Parquet
qsv lens data.jsonl // JSON Lines
qsv lens data.json // JSON - will only work with a JSON Array
qsv lens data.avro // Avro

Prompt the user to select a column to display. Once selected, exit with the value of the City column for the selected row sent to stdout

qsv lens --prompt 'Select City:' --echo-column 'City' data.csv

Only show rows that contain "NYPD"

qsv lens --filter NYPD data.csv

Show rows that contain "nois" case insensitive (for noise, noisy, noisier, etc.)

qsv lens --filter nois --ignore-case data.csv

Find and highlight matches in the data

qsv lens --find 'New York' data.csv

Find and highlight cells that have all numeric values in a column.

qsv lens --find '^\d+$' data.csv

Usage

qsv lens [options] [<input>]
qsv lens --help

Lens Options

      Option       TypeDescriptionDefault
 ‑d,
‑‑delimiter 
stringDelimiter character (comma by default) "auto" to auto-detect the delimiter
 ‑t,
‑‑tab‑separated 
flagUse tab separation. Shortcut for -d '\t'
 ‑‑no‑headers flagDo not interpret the first row as headers
 ‑‑columns stringUse this regex to select columns to display by default. e.g. "col1|col2|col3" to select columns "col1", "col2" and "col3" and also columns like "col1_1", "col22" and "col3-more".
 ‑‑filter stringUse this regex to filter rows to display by default. The regex is matched against each cell in every column. e.g. "val1|val2" filters rows with any cells containing "val1", "val2" or text like "my_val1" or "val234".
 ‑‑find stringUse this regex to find and highlight matches by default. Automatically sets --monochrome to true so the matches are easier to see. The regex is matched against each cell in every column. e.g. "val1|val2" highlights text containing "val1", "val2" or longer text like "val1_ok" or "val2_error".
 ‑i,
‑‑ignore‑case 
flagSearches ignore case. Ignored if any uppercase letters are present in the search string
 ‑f,
‑‑freeze‑columns 
integerFreeze the first N columns1
 ‑m,
‑‑monochrome 
flagDisable color output
 ‑W,
‑‑wrap‑mode 
stringSet the wrap mode for the output.disabled
 ‑A,
‑‑auto‑reload 
flagAutomatically reload the data when the file changes.
 ‑S,
‑‑streaming‑stdin 
flagEnable streaming stdin (load input as it's being piped in) NOTE: This option only applies to stdin input.
 ‑P,
‑‑prompt 
stringSet a custom prompt in the status bar. Normally paired w/ --echo-column: qsv lens --prompt 'Select City:' --echo-column 'City' Supports ANSI escape codes for colored or styled text. When using escape codes, ensure it's properly escaped. For example, in bash/zsh, the ...syntaxisusedtodoso:qsvlensprompt'...' syntax is used to do so: qsv lens --prompt '\033[1;5;31mBlinking red, bold text\033[0m' see https://en.wikipedia.org/wiki/ANSI_escape_code#Colors or https://gist.github.com/fnky/458719343aabd01cfb17a3a4f7296797 for more info on ANSI escape codes. Typing a complicated prompt on the command line can be tricky. If the prompt starts with "file:", it's interpreted as a filepath from which to load the prompt, e.g. qsv lens --prompt "file:prompt.txt"
 ‑‑echo‑column stringPrint the value of this column to stdout for the selected row
 ‑‑debug flagShow stats for debugging

Common Options

     Option     TypeDescriptionDefault
 ‑h,
‑‑help 
flagDisplay this message

Source: src/cmd/lens.rs | Table of Contents | README