1. ホーム
  2. mysql

MySQLコマンドライン結果の出力形式をCSVに変更

2023-09-23 09:13:38

質問

コマンドラインでクエリの出力からヘッダーのないCSVデータをMySQLに取得したいのです。私はこのクエリを MySQL サーバーとは別のマシンで実行しているので、"INTO OUTFILE" を持つこれらすべての Google 回答は役に立ちません。

そこで、私は mysql -e "select people, places from things" . すると、次のようなものが出力されます。

+--------+-------------+
| people | places      |
+--------+-------------+
|   Bill | Raleigh, NC |
+--------+-------------+

まあ、それはしょうがない。でもね、見てください! もし私がパイプで にパイプすれば にパイプすると、タブ区切りのリストになります。

people  places
Bill    Raleigh, NC

これは良いですね、少なくともプログラムで解析可能です。でも、私はTSVじゃなくてCSVが欲しいし、ヘッダもいらない。ヘッダを取り除くには mysql <stuff> | tail -n +2 で取り除けるけど、MySQLにヘッダを省略するフラグがあるのなら、それは避けたい。それに、タブを全部カンマに置き換えるわけにもいかないし、カンマが入ったコンテンツは扱えないしね。

では、MySQL にヘッダーを省略させ、CSV 形式のデータを提供させるにはどうしたらよいでしょうか。

どのように解決するのですか?

私は、最終的に コマンドライン ツールを書くことにしました。これは cut に似ているが、引用符で囲まれたフィールドなどをどうするかを知っている。このツールと @Jimothy の回答の組み合わせにより、ファイルシステムにアクセスできないリモートの MySQL サーバーから、このコマンドでヘッダーレス CSV を私のローカル マシンに取得することができます。

$ mysql -N -e "select people, places from things" | csvm -i '\t' -o ','
Bill,"Raleigh, NC"

csvmaster on github