Data · 25 tools · nothing uploads

Join two CSVs

Join two CSVs on a shared column. Inner keeps only matching rows, left/right keep every row from one side (blank cells for the other), outer keeps every row from both. A column name that collides with the other file gets a "_2" suffix. Runs entirely on your device.

Input

Options

Join two CSVs takes exactly two files and combines them on the column named in on. An inner join drops rows failing to match. Left and right keep one file's rows whole while blanking the other side's cells; outer keeps rows from either file. A duplicate column name in file two gets a _2 suffix, and a missing on column is refused.

Questions

What join types are supported?

Inner, left, right and outer, matched on the column named in on, which must exist in both files.

What if a column exists in both files besides the join column?

The second file's copy gets a _2 suffix added to its header name to avoid a collision.

How many files does it take?

Exactly 2; any other count is refused with the count given.

What if the on column does not exist?

It is refused, naming the file and listing that file's actual column names.

Does the summary line tell me anything useful?

Yes, it reports how many rows matched, how many were only in each file, and the total output row count.

What is the output file called?

joined.csv, one file no matter how many inputs you drop, with the key column written first.

Related Data tools

1→1Reorder / insert CSV columnsReorder (and drop) a CSV's columns by name, and optionally insert one new column with a constant value at a given position. Quote-aware. A record with a quoted field containing a literal newline stays one record.Takes one file1→1Map CSV column namesRename a CSV's header to a new schema ("old=new" pairs), and optionally drop every column that isn't named in the mapping. Column order and data are otherwise untouched. Quote-aware. A record with a quoted field containing a literal newline stays one record.Takes one file1→1Change CSV separatorRe-delimit a CSV (comma, semicolon, tab or pipe), auto-detecting the current separator when not told what it is. Quote-aware. A record with a quoted field containing a literal newline (including in the header) stays one record.Takes one file1→1Transpose CSVSwap a CSV's rows and columns. Column 1 becomes row 1, and so on. A ragged row (fewer cells than the widest row) is padded with empty cells rather than refused. Quote-aware. A record with a quoted field containing a literal newline stays one record, not two.Takes one file1→1Split CSV into partsCut a CSV into several smaller files of N data rows each, repeating the header in every part. Quote-aware: a record with a quoted field containing a literal newline stays one record.Takes one filen→1Merge CSV filesConcatenate several CSVs with the same header into one file, in the order given. Quote-aware. A record with a quoted field containing a literal newline stays one record.Combines the files you drop1→1Remove duplicate CSV rowsStrip repeated rows from a CSV. Compares whole records, not physical lines, so a quoted field containing a newline is one record and stays one record.Takes one file1→1Find incomplete CSV recordsReport every record whose cell count doesn't match the header: too few cells (a truncated record) or too many (an unescaped comma). Read-only: nothing is changed. Quote-aware, so a record with a quoted field containing a literal newline still counts as one record with the right cell count.Takes one file