Se tutto ciò che devi fare è tradurre tutti i caratteri di tabulazione in caratteri virgola, tr
è probabilmente la strada da percorrere.
Lo spazio vuoto qui è una scheda letterale:
$ echo "hello world" | tr "\\t" ","
hello,world
Ovviamente, se hai delle schede incorporate all'interno di stringhe letterali nel file, questo tradurrà erroneamente anche quelle; ma le schede letterali incorporate sarebbero piuttosto rare.
perl -lpe 's/"/""/g; s/^|$/"/g; s/\t/","/g' < input.tab > output.csv
Perl è generalmente più veloce in questo genere di cose rispetto a sed, awk e Python.
Se sei preoccupato per le virgole incorporate, dovrai utilizzare un metodo leggermente più intelligente. Ecco uno script Python che prende le righe TSV dallo stdin e scrive le righe CSV nello 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)
Eseguilo da una shell come segue:
python script.py < input.tsv > output.csv
-
Se vuoi convertire l'intero file tsv in un file csv:
$ cat data.tsv | tr "\\t" "," > data.csv
-
Se vuoi omettere alcuni campi:
$ cat data.tsv | cut -f1,2,3 | tr "\\t" "," > data.csv
Il comando precedente convertirà il file data.tsv in un file data.csv contenente solo i primi tre campi.