LoginSignup
0
0

More than 3 years have passed since last update.

mysqlの結果をささっとLinuxコマンドでCSVに変換する

Posted at

mysqlの出力結果をCSVにしたいと思ったとき、パラメータがすぐにわからない時があります。
たぶんパラメータをいじればできるんでしょうけど、それほどmysqlに詳しくないし調べるのもめんどくさい。
でもgrepやsedを駆使すればいけるんじゃねーかとやってみました。

tl;dr

mysqlの取得結果をパイプで下記をつなげるだけです。

| grep -v "\-\+\-" | sed "s/^| //g" | sed "s/ |$//g" | sed "s/ | /,/g" | sed "s/ //g"

解説

例えばこんな出力があるとします。

+---------+-------------+
|      ID | CREATE_TIME |
+---------+-------------+
|   10508 |  1569301799 |
|   10509 |  1569301801 |
|   10510 |  1569301802 |
|   10511 |  1569301803 |
|   10512 |  1569301804 |
+---------+-------------+

この枠組みが邪魔ですね。grepとsedで削除してみます。

+---------+-------------+  <---No.1
|      ID | CREATE_TIME |
+---------+-------------+  <---No.1
|   10508 |  1569301799 |
|   10509 |  1569301801 |
|   10510 |  1569301802 |
|   10511 |  1569301803 |
|   10512 |  1569301804 |
+---------+-------------+  <---No.1
|         |             |
No.2     No.4           No.3

処理の意味は下記の通りです。

| grep -v "\-\+\-"   No.1 : "+"が入った行を省いて
| sed "s/^| //g"     No.2 : 先頭の|を省いて
| sed "s/ |$//g"     No.3 : 最後の|を省いて
| sed "s/ | /,/g"    No.4 : 間の|を,に変えて
| sed "s/ //g"       No.5 : スペースを削除

加工結果です。

ID,CREATE_TIME
10508,1569301799
10509,1569301801
10510,1569301802
10511,1569301803
10512,1569301804

注意

sqlの結果にスペースが入ってしまうと、うまくいかなくなります。
あくまで上記は参考に自分でがんばってみてください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0