Si vous n'avez qu'à traduire tous les caractères de tabulation en caractères virgule, tr
est probablement la voie à suivre.
L'espace vide ici est une tabulation littérale :
$ echo "hello world" | tr "\\t" ","
hello,world
Bien sûr, si vous avez des onglets intégrés à l'intérieur des littéraux de chaîne dans le fichier, cela les traduira également de manière incorrecte ; mais les tabulations littérales intégrées seraient assez rares.
perl -lpe 's/"/""/g; s/^|$/"/g; s/\t/","/g' < input.tab > output.csv
Perl est généralement plus rapide dans ce genre de choses que sed, awk et Python.
Si vous vous inquiétez des virgules intégrées, vous devrez utiliser une méthode légèrement plus intelligente. Voici un script Python qui prend les lignes TSV de stdin et écrit les lignes CSV dans 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)
Exécutez-le à partir d'un shell comme suit :
python script.py < input.tsv > output.csv
-
Si vous souhaitez convertir l'intégralité du fichier tsv en un fichier csv :
$ cat data.tsv | tr "\\t" "," > data.csv
-
Si vous souhaitez omettre certains champs :
$ cat data.tsv | cut -f1,2,3 | tr "\\t" "," > data.csv
La commande ci-dessus convertira le fichier data.tsv en fichier data.csv contenant uniquement les trois premiers champs.