MySQL查询将输出打印为CSV到标准输出

Bla*_*ere 13 mysql sql into-outfile

我想做以下事情 mysql -uuser -ppass -h remote.host.tld database < script.sql

其中script.sql包含以下内容

SELECT *
FROM webrecord_wr25mfz_20101011_175524
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' 
LINES TERMINATED BY '\n'
Run Code Online (Sandbox Code Playgroud)

我希望CSV输出指向标准输出.原因是因为使用an运行此查询INTO OUTFILE 'blah.csv'将保存远程主机上的文件.我希望文件保存在本地主机上.

如果我可以将标准输出重定向到文件,那将是花花公子.

Eug*_*ene 5

上面的答案似乎没有完全回答原来的问题,我不确定这是否可以,但希望这可以帮助某人:

请参阅如何以 CSV 格式输出 MySQL 查询结果?关于如何做的很多评论sed。例如,根据原始参数,以下内容可能就足够了:

mysql --batch -u user -h remote.host.tld database --port 3306 -ppass -e "SELECT * FROM webrecord_wr25mfz_20101011_175524;" | sed 's/\t/,/g' 2>&1
Run Code Online (Sandbox Code Playgroud)

这与上面的答案类似,但重定向到stdout而不是blah.csv.

但是,(虽然不确定如果您需要保留制表符这是否有效,但有很多方法可以解决这个问题),我使用/sf/answers/178025851/来正确转义双引号和转换为逗号分隔:

mysql --batch -u user -h remote.host.tld database --port 3306 -ppass -e "SELECT * FROM webrecord_wr25mfz_20101011_175524;" | perl -lpe 's/"/\\"/g; s/^|$/"/g; s/\t/","/g' 2>&1
Run Code Online (Sandbox Code Playgroud)
  • 执行sql "SELECT * FROM webrecord_wr25mfz_20101011_175524;"via mysql(此输出将以制表符分隔)
  • 通过管道转换为逗号分隔的perl -lpe 's/"/\\"/g; s/^|$/"/g; s/\t/","/g'
  • stdout通过附加将输出转到2>&1


Bry*_*eld 0

尝试这个:mysql -uuser -ppass -h remote.host.tld database < script.sql 2> blah.csv

这将重定向 stderr

  • 这似乎并不能解决问题,即如果您不指定 OUTFILE,则无法使用后续的“FIELDS TERMINATED BY”等,因此您实际上会获得 CSV 输出! (6认同)