Jika Anda hanya perlu menerjemahkan semua karakter tab menjadi karakter koma, tr
mungkin adalah cara yang tepat.
Ruang kosong di sini adalah tab literal:
$ echo "hello world" | tr "\\t" ","
hello,world
Tentu saja, jika Anda telah menyematkan tab di dalam string literal dalam file, ini juga akan salah menerjemahkannya; tetapi tab literal tersemat tidak umum.
perl -lpe 's/"/""/g; s/^|$/"/g; s/\t/","/g' < input.tab > output.csv
Perl umumnya lebih cepat dalam hal semacam ini daripada sed, awk, dan Python.
Jika Anda khawatir tentang koma yang disematkan, Anda harus menggunakan metode yang sedikit lebih cerdas. Berikut skrip Python yang mengambil baris TSV dari stdin dan menulis baris CSV ke 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)
Jalankan dari shell sebagai berikut:
python script.py < input.tsv > output.csv
-
Jika Anda ingin mengonversi seluruh file tsv menjadi file csv:
$ cat data.tsv | tr "\\t" "," > data.csv
-
Jika Anda ingin menghilangkan beberapa kolom:
$ cat data.tsv | cut -f1,2,3 | tr "\\t" "," > data.csv
Perintah di atas akan mengonversi file data.tsv menjadi file data.csv yang hanya berisi tiga yang pertama bidang.