有没有一种简单的方法可以从Linux命令行运行MySQL查询并以CSV格式输出结果?
这就是我现在正在做的事情:
mysql -u uid -ppwd -D dbname << EOQ | sed -e 's/ /,/g' | tee list.csv
select id, concat("\"",name,"\"") as name
from students
EOQ
Run Code Online (Sandbox Code Playgroud)
当有很多列需要用引号括起来,或者结果中有引号需要转义时,它会变得混乱.
我想在命令行上从查询输出中获取无头CSV数据.我在与MySQL服务器不同的机器上运行此查询,因此所有使用"INTO OUTFILE"的Google答案都不好.
所以我跑了mysql -e "select people, places from things".那输出看起来像这样的东西:
+--------+-------------+
| people | places |
+--------+-------------+
| Bill | Raleigh, NC |
+--------+-------------+
Run Code Online (Sandbox Code Playgroud)
嗯,这不好.但是,嘿,看!如果我只是把它管道到任何东西,它会把它变成一个以制表符分隔的列表:
people places
Bill Raleigh, NC
Run Code Online (Sandbox Code Playgroud)
那更好 - 至少它是以编程方式解析的.但我不想要TSV,我想要CSV,而且我不想要那个标题.我可以摆脱标题mysql <stuff> | tail -n +2,但这是一个麻烦我想避免如果MySQL只有一个标志来省略它.而且我不能用逗号替换所有选项卡,因为它不处理带有逗号的内容.
那么,我怎样才能让MySQL省略标题并以CSV格式提供数据?
我有一个制表符分隔的文件,有超过2亿行.linux中将此转换为csv文件的最快方法是什么?这个文件确实有多行标题信息,我需要在路上删除,但标题的行数是已知的.我已经看到了建议sed和gawk,但我不知道是否有一个"优先"选择.
只是为了澄清,此文件中没有嵌入的选项卡.
我在服务器上有一个shell脚本.该脚本将csv文件吐出到本地目录.问题是数据库服务器在服务器b上.如何在这样的设置中使用select*into outfile?
我明白了
Can't create/write to file '/home/username/test.csv/' (Errcode: 2)
Run Code Online (Sandbox Code Playgroud)
使用'LOCAL'关键字解决了加载数据的影响.outfile有类似的东西吗?