一尘不染

将MySQL命令行结果的输出格式更改为CSV

mysql

我想从命令行的查询输出到MySQL获得无标题的CSV数据。我在与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格式提供数据?


阅读 281

收藏
2020-05-17

共1个答案

一尘不染

我最后写了自己的命令行工具来解决这个问题。类似于cut,不同之处在于它知道如何处理带引号的字段等。此工具与@Jimothy的答案配合使用,使我可以从远程MySQL服务器获取无标题的CSV文件,而我无法使用此命令访问本地计算机上的文件系统:

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

github上的csvmaster

2020-05-17