Si todo lo que necesita hacer es traducir todos los caracteres de tabulación a caracteres de coma, tr
es probablemente el camino a seguir.
El espacio en blanco aquí es una pestaña literal:
$ echo "hello world" | tr "\\t" ","
hello,world
Por supuesto, si tiene pestañas incrustadas dentro de cadenas literales en el archivo, esto también las traducirá incorrectamente; pero las pestañas literales incrustadas serían bastante poco comunes.
perl -lpe 's/"/""/g; s/^|$/"/g; s/\t/","/g' < input.tab > output.csv
Perl es generalmente más rápido en este tipo de cosas que sed, awk y Python.
Si le preocupan las comas incrustadas, deberá usar un método un poco más inteligente. Aquí hay una secuencia de comandos de Python que toma líneas TSV de stdin y escribe líneas CSV en stdout:
import sys
import csv
tabin = csv.reader(sys.stdin, dialect=csv.excel_tab)
commaout = csv.writer(sys.stdout, dialect=csv.excel)
for row in tabin:
commaout.writerow(row)
Ejecútelo desde un shell de la siguiente manera:
python script.py < input.tsv > output.csv
-
Si desea convertir todo el archivo tsv en un archivo csv:
$ cat data.tsv | tr "\\t" "," > data.csv
-
Si desea omitir algunos campos:
$ cat data.tsv | cut -f1,2,3 | tr "\\t" "," > data.csv
El comando anterior convertirá el archivo data.tsv en un archivo data.csv que contiene solo los primeros tres campos.