Pokud vše, co musíte udělat, je přeložit všechny znaky tabulátoru na znaky čárky, tr
je pravděpodobně správná cesta.
Prázdné místo zde je doslovný tabulátor:
$ echo "hello world" | tr "\\t" ","
hello,world
Samozřejmě, pokud máte v souboru vložené tabulátory do řetězcových literálů, přeloží se tím také nesprávně; ale vložené doslovné karty by byly poměrně neobvyklé.
perl -lpe 's/"/""/g; s/^|$/"/g; s/\t/","/g' < input.tab > output.csv
Perl je v tomto druhu obecně rychlejší než sed, awk a Python.
Pokud se obáváte vložených čárek, budete muset použít trochu inteligentnější metodu. Zde je skript Pythonu, který přebírá řádky TSV z stdin a zapisuje řádky CSV do 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)
Spusťte jej z prostředí shell následovně:
python script.py < input.tsv > output.csv
-
Pokud chcete převést celý soubor tsv na soubor csv:
$ cat data.tsv | tr "\\t" "," > data.csv
-
Pokud chcete některá pole vynechat:
$ cat data.tsv | cut -f1,2,3 | tr "\\t" "," > data.csv
Výše uvedený příkaz převede soubor data.tsv na soubor data.csv obsahující pouze první tři pole.