uncsv(1)

NAME
uncsv - convert to or from a CSV stream

SYNOPSIS
uncsv [-hV] [-d delimiter] [-n repl] [-r repl] [file ...]
csv [-hVsSqQ] [-d delimiter] [-n repl] [-r repl] [file ...]

DESCRIPTION
uncsv is a filter command converting the lines of a CSV file into non-escaped, non-quoted delimited file (pipe by default). This program will error out if it encounters a character matching the delimiter, it will also replace the carriage return and new-line characters found in quoted values allowing you to use awk to play with your CSVs.

csv is the opposite of this command. It takes an unquoted stream of values, separated by the delimiter of your choice (default: pipe '|') and produces a "standard" CSV file.

Both tools avoid end-of-line character politics and will leave these untouched, if your file comes with both carriage returns and new-line characters (\r\n a.k.a. CRLF), uncsv will leave them as-is.

The options are as follows:

-d delimiter
    Specify the output delimiter for uncsv and the input delimiter for csv , defaults to the pipe character '|'. uncsv interrupts if the delimiter is found in the input data.

-n repl
    If specified, all the new-line characters (a.k.a. line feed or \n) will be replaced by this replacement string. uncsv replaces them by spaces by default which is destructive. csv will do the opposite and replace this pattern by an actual new line character.

-r repl
    If specified, all the carriage return characters (a.k.a. \r) will be replaced by this replacement string. uncsv replaces them by spaces by default which is destructive. csv will do the opposite and replace this pattern by an actual carriage return character.

-s  Quote all fields with bordering spaces or tabs (heading or trailing). This is only applicable when generating the CSV stream.

-S  Quote all fields containing spaces or tabs (heading or trailing). This is only applicable when generating the CSV stream.

-q  Quote all fields with a non-empty value. This is only applicable when generating the CSV stream.

-Q  Quote everything, even empty fields. This is only applicable when generating the CSV stream.

-V  Print version.

-h  Print usage.

EXAMPLES
Print the second field of a CSV:

    uncsv file.csv | cut -d'|' -f 2

Convert a CSV to un-quoted tab-delimited format:

    uncsv -d'\t' < file.csv > delimited

Convert a PostgreSQL output to CSV:

    psql yourdb
    psql> \f\a
    psql> \o | csv > /tmp/output.csv
    psql> select * from candies;
    psql> \o

Print the first line of the third field:

    uncsv -n '~LF~' file.csv | cut -d'|' -f 3 | sed 's/~LF~.*//g'

Convert your /etc/passwd to CSV.

    csv -d: < /etc/passwd

BUGS
csv has a 64KB limit on line size.

SEE ALSO
awk(1), cut(1)

AUTHORS
uncsv was written by Bertrand Janin <b@janin.com> and is distributed under an ISC license (BSD, MIT and OSI compatible).