Logo

MonoCalc

/

Text Column Extractor

Text

Splits each row on a delimiter you choose, optionally respecting double-quoted fields.

cut -d, -f2
Comma, tab, pipe and semicolon are scored on the first 10 rows — currently Comma (,).

Sample data

Paste CSV, TSV, terminal output, a log, or a Markdown table.
0 characters
Positions, ranges and — with a header row — names: 2 · 1,3 · 2-4 · email
Joins the extracted columns — currently Comma (,).
Used when a row is shorter than the selection
Emitted for a missing cell
Set both to ' to build a SQL IN list

Nothing to extract yet

Paste delimited text, a log, or a Markdown table above — or load one of the samples to see each split mode in action.

About This Tool

Text Column Extractor – Pull Fields Out of Delimited and Aligned Text

Half the data people work with arrives as a rectangle of text: a CSV pasted out of a spreadsheet, the output of ls -l or df -h, a pipe-delimited log, a fixed-width report from a mainframe, or a Markdown table copied from documentation. Getting one field out of that rectangle usually means opening a spreadsheet or reaching for cut and awk. This text column extractor does the same job in the browser: paste the text, say which columns you want, and get just those fields back.

Five ways to split a row

Delimiter mode splits on a character or string you choose and is the equivalent of cut -d, -f2. Whitespace mode splits on runs of spaces and tabs regardless of how many, which is what makes awk '{print $2}' work on visually aligned command output. Fixed width mode cuts by character positions instead, the way cut -c11-20 does, for legacy reports where the columns line up but nothing separates them. Regex mode lets you supply your own splitting pattern such as \s*\|\s* for irregular logs. And Markdown table mode strips the pipes and discards the |---| separator row so a documentation table becomes a plain grid.

Selecting, reordering and removing columns

Columns are selected with a comma-separated list that accepts single positions (2), ranges (2-4), and — when the first row is marked as a header — column names (email). Because the output follows the order you list them in, 3,1,2 is also a column reorderer, which plain cut cannot do. Turning on invert selection flips the meaning entirely: the tool returns every column except the ones you named, which is the quickest way to drop a sensitive field before sharing a file. An indexing toggle switches between 1-based positions, matching awk and cut, and 0-based positions, matching most programming languages.

Quoted fields and ragged rows

Real CSV is messier than it looks. A value like "Smith, John" contains the delimiter, and a naive split turns one row of three fields into four. With quoted-field handling enabled the delimiter scanner follows RFC 4180: a quote only opens a field at the start of that field, a doubled quote inside is a literal quote, and delimiters — and even line breaks — inside quotes are ignored. Rows whose field count differs from the header are flagged as ragged, with their original line numbers listed, so a truncated export shows up immediately instead of quietly producing wrong values.

Column numbers are counted after the split
Skipping leading rows and dropping blank lines happen before fields are split, but column positions always refer to the fields of the row you are looking at. In fixed-width mode each character range you define counts as one column, so two ranges means column 1 and column 2 — not character positions.

Reading the output panel

Above the result the tool reports how many rows it processed, how many columns it detected, how many the selection resolved to, and how many extracted cells came out empty. A live column preview table lists each detected column with its header, a sample value, a non-empty count, and an inferred type badge — numeric, date, text, or empty — so you can pick a column by clicking rather than counting fields by hand. When every extracted cell parses as a number, a numeric summary appears with the count, sum, minimum, maximum, and mean at your chosen precision, which is a fast sanity check that you grabbed the column you meant.

Finishing the output

The extracted columns are joined with an output delimiter you control — a comma, a tab, a newline, a pipe, or any string, with \t, \n, \s and \| expanded to real characters. Each value can be wrapped in a prefix and suffix, which is how you turn a column of IDs into a SQL IN ('101', '102') list in one pass. Rows can be deduplicated and sorted alphabetically or numerically, and the finished text can be copied, downloaded as TXT or CSV, or fed straight back into the input to chain a second extraction.

Privacy and limits

Everything runs client-side; no text is uploaded. Files you choose are read locally and capped at 2 MB, and input is capped at 2,000,000 characters and 200,000 lines so the tab stays responsive. The share link carries your split settings and column selection, and the text itself only when it is short enough for a URL — anything longer is deliberately left out rather than silently truncated.

Frequently Asked Questions

Is the Text Column Extractor free?

Yes, Text Column Extractor is totally free :)

Can I use the Text Column Extractor offline?

Yes, you can install the webapp as PWA.

Is it safe to use Text Column Extractor?

Yes, any data related to Text Column Extractor only stored in your browser (if storage required). You can simply clear browser cache to clear all the stored data. We do not store any data on server.

How does the Text Column Extractor work?

Your text is first broken into rows, then each row is broken into fields using the split mode you pick — a delimiter, runs of whitespace, fixed character positions, your own regular expression, or Markdown table pipes. The column selection is resolved into a list of positions, each row is mapped onto those positions in the order you listed them, and the surviving cells are joined with the output delimiter. Skipping leading rows and dropping blank lines happen before the split; trimming, wrapping, deduplication and sorting happen after it.

Can I select columns by name instead of by number?

Yes, as long as "First row is header" is switched on. Any selection token that is not a plain number or a number range is looked up against the header row, matched case-insensitively and ignoring surrounding spaces. If the name is not found, the error lists the header names that were actually detected. Tokens made only of digits are always read as positions, so a column literally named "2" has to be selected by its position.

How do I delete a column instead of keeping one?

Turn on "Invert selection". The tool then returns every column except the ones you named, computed against the widest row it detected. Selecting column 3 with invert on strips the third field from every row and leaves the rest in their original order. If the inverted selection happens to cover every column, the output is empty and a warning says so rather than the tool failing.

Does it handle commas inside quoted CSV fields?

Yes, when "Respect quoted fields" is on and you are in Delimiter mode. The scanner follows RFC 4180: a double quote only opens a field when nothing but whitespace has been seen since the last delimiter, a doubled quote inside a quoted field is a literal quote, and delimiters inside quotes are ignored. Line breaks inside a quoted field are also kept, so a record that wraps onto a second physical line still counts as one row. Quote handling applies to Delimiter mode only — whitespace, fixed-width, regex and Markdown modes ignore quotes entirely.

What are the Unix equivalents of the split modes?

Delimiter mode is cut -d, -f2; whitespace mode is awk '{print $2}'; fixed-width mode is cut -c11-20; regex mode is awk with a custom -F field separator; Markdown mode has no direct equivalent but behaves like cutting on pipes with the separator row removed. Unlike cut, this tool emits columns in the order you list them, so 3,1,2 genuinely reorders the output.

Is my data uploaded anywhere?

No. Parsing, selection and joining all run in your browser with plain JavaScript, and nothing is sent to a server. Files you choose are read locally and capped at 2 MB, input is capped at 2,000,000 characters and 200,000 lines, and the share link carries your settings plus the text itself only when the text is short enough to fit in a URL — longer input is left out of the link entirely.