MySQL query to print output as CSV to standard output
我想做以下 mysql -uuser -ppass -h remote.host.tld database < script.sql
其中 script.sql 包含以下
1
2 3 4 5 6 |
SELECT *
FROM webrecord_wr25mfz_20101011_175524 FIELDS TERMINATED BY ‘,’ ENCLOSED BY ‘”‘ LINES TERMINATED BY ‘\ ‘ |
我希望将 CSV 输出定向到标准输出。原因是使用 INTO OUTFILE ‘blah.csv’ 运行此查询会将文件保存在远程主机上。我希望将文件保存在本地主机上。
如果我可以将标准输出重定向到一个文件,那就太棒了。
- 将 MySQL 命令行结果的输出格式更改为 CSV 的可能重复项
- 不是骗子,这是关于路由到标准输出的问题。
上面的答案似乎没有完全回答最初的问题,我也不确定这是否也可以,但希望这可能对某人有所帮助:
请参阅如何以 CSV 格式输出 MySQL 查询结果?很多关于如何 sed 的评论。例如,根据原始参数,以下内容可能就足够了:
1
|
这类似于上面的答案,但重定向到 stdout 而不是 blah.csv.
但是,(虽然不确定如果您需要保留选项卡这是否可行,但有很多方法可以解决这个问题),我使用 https://stackoverflow.com/a/2543226/2178980 正确转义双引号并转换为逗号分隔:
1
|
- 通过 mysql 执行 sql “SELECT * FROM webrecord_wr25mfz_20101011_175524;” (此输出将以制表符分隔)
- 通过管道转换为逗号分隔的 perl -lpe ‘s/”/\\”/g; s/^|$/”/g; s/\\t/”,”/g’
- 通过附加 2>&1 将输出转到 stdout
部分是对 MySQL SELECT INTO OUTFILE 到不同服务器的重复问题。 FIELDS TERMINATED BY 不能在没有 into outfile
的情况下使用
一个(不那么优雅的)替代方法是使用 –batch 选项来产生制表符分隔的输出和 sedding 标准输出。像这样的东西:
1
|
请注意 –batch 会转义特殊字符,因此根据您拥有的数据及其可预测性,您可能需要更改 sed
试试这个:mysql -uuser -ppass -h remote.host.tld database < script.sql 2> blah.csv
这将重定向标准错误
- 这似乎并不能解决问题,即如果您不指定 OUTFILE,您将无法使用后续的”FIELDS TERMINATED BY”,因此您实际上会获得 CSV 输出!
来源:https://www.codenong.com/3946497/