Wenn Sie nur noch übersetzen müssen alle Tabulatorzeichen in Kommazeichen, tr
ist wahrscheinlich der richtige Weg.
Das Leerzeichen hier ist ein wörtlicher Tabulator:
$ echo "hello world" | tr "\\t" ","
hello,world
Wenn Sie Tabulatoren in String-Literale in der Datei eingebettet haben, werden diese natürlich auch falsch übersetzt; aber eingebettete wörtliche Tabulatoren wären ziemlich ungewöhnlich.
perl -lpe 's/"/""/g; s/^|$/"/g; s/\t/","/g' < input.tab > output.csv
Perl ist in solchen Dingen im Allgemeinen schneller als sed, awk und Python.
Wenn Sie sich Sorgen um eingebettete Kommas machen, müssen Sie eine etwas intelligentere Methode verwenden. Hier ist ein Python-Skript, das TSV-Zeilen von stdin nimmt und CSV-Zeilen nach stdout schreibt:
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)
Führen Sie es wie folgt von einer Shell aus:
python script.py < input.tsv > output.csv
-
Wenn Sie die gesamte tsv-Datei in eine csv-Datei konvertieren möchten:
$ cat data.tsv | tr "\\t" "," > data.csv
-
Wenn Sie einige Felder weglassen möchten:
$ cat data.tsv | cut -f1,2,3 | tr "\\t" "," > data.csv
Der obige Befehl konvertiert die data.tsv-Datei in eine data.csv-Datei, die nur die ersten drei enthält Felder.