python -c 'import sys, csv; csv.writer(sys.stdout, delimiter="\t").writerows(csv.reader(sys.stdin))' < 入力.csv > 出力.tsv
表題のテーマでググるとsedなりtrなりで単純にデリミタを置換する方法が多く紹介されています。
しかしそれではクォーテーションされた文字列の一部としてのカンマも置換されてしまいます。
クォーテーションを考慮しようとすると、もはやどんなに正規表現を駆使しようとも置換では不可能なので、既成のCSVツールに頼りたくなります。
ではシェル上でパイプフィルタとして手軽に呼び出せる既成のCSVツールはどんなものがあるだろうか。
ない
少なくとも私は知らない。あったら教えてください。
したがって、何らかのスクリプト言語のCSVライブラリを用いることになります。
ひとまず思い浮かぶのは「電池ついてます」がウリのpythonなので、冒頭のようなワンライナーを考えました。
もちろん、デリミタ指定を変えてやればTSV → CSVもできるし、独自デリミタもできます。
python -c 'import sys, csv; csv.writer(sys.stdout, delimiter=",").writerows(csv.reader(sys.stdin, delimiter="\t"))' < 入力.tsv > 出力.csv
ワンライナーは短さこそ至上命題なので、もっと短く書けるよというコメントを歓迎します。
もちろんpythonに限りません。