Converting CSV to TSV
Python
Add to file named csv2tab
, and make it executable
touch csv2tab && chmod u+x csv2tab
Add to it
#!/usr/bin/env python
import csv, sys
csv.writer(sys.stdout, dialect='excel-tab').writerows(csv.reader(sys.stdin))
Test runs
$ echo 'A,,C,"D,E,F","G",I,"K,L,M",Z' | ./csv2tab
A C D,E,F G I K,L,M Z
$ ./csv2tab < data.csv > data.tsv && head data.tsv
1A C D,E,F G I K,L,M Z
2A C D,E,F G I K,L,M Z
3A C D,E,F G I K,L,M Z
Using csvkit
(Python), for example:
$ csvformat -T in.csv > out.txt
Does streaming, with correct CSV and TSV quoting and escaping
It's in apt and other package managers
For fun, sed
.
sed -E 's/("([^"]*)")?,/\2\t/g' file
If your sed
doesn't support -E
, try with -r
. If your sed
doesn't support \t
for a literal tab, try putting a literal tab (in many shells, ctrl-v tab) or in Bash, use a $'...'
C-style string (in which case the backslash in \2
needs to be doubled). If you want to keep the quotes, use \1
instead of \2
(in which case the inner pair of parentheses is useless, and can be removed).
This makes no attempt to handle escaped double quotes inside double quotes; some CSV dialects support this by doubling the quoted double quote (sic).