Windows
vsql

vsqlでダブルクォーテーション付カンマ区切りで出力する方法@windows環境

コマンド

vsql *** -F """,""" *** | gawk "{gsub(/^|$/,""""\042"""");print}" | sed "$d" | sed "$d" > result.csv

「-F ""","""」について

-F ""","""

コマンドプロンプトでは"の中は"がエスケープ文字になる。

gawkについて

gsubをつかって行頭と行末に「"」を追加している。
「\042」は「"」のASCIIコードのオクテット表記。この渡し方はlinuxのawkと同じ。
「""""」と4つ並べている点について。なぜか分からないけれど「"」のエスケープ文字としての処理が2回行われている様なので、「""""」はawk的には「"」を意味している。

sedについて

$は最終行を表しておりdでその行を削除している。
vsqlの結果は最後に出力行数と空白行が入るためその2行を消すために2回sedをいれている。
「head -n -2」でも最終2行を消すことはできるがsedよりも遅い模様。