BASH MySQL 查询以逗号分隔的文件

标签 bash mysql csv

我有以下 bash 脚本:

#!/bin/sh

MYSQLHOST="mysql.remote-host.com"
MYSQLDB="mysqldb"
MYSQLTABLE="table"
MYSQLUSER="user"
MYSQLPASS="pass"
MYSQLDUMP="Report/report.csv"
LOG="Report/report.log"

MYSQLOPTS="--user=${MYSQLUSER} --password=${MYSQLPASS} --host=${MYSQLHOST} ${MYSQLDB}"


echo "Report Begin: $(date)"
 echo "MySQL Dump Begin: $(date)" >> ${LOG}
  echo "SELECT ${MYSQLTABLE}.created_at, ${MYSQLTABLE}.product_options FROM ${MYSQLTABLE} WHERE ${MYSQLTABLE}.product_id=1 ORDER BY ${MYSQLTABLE}.created_at" | mysql ${MYSQLOPTS} > ${MYSQLDUMP}
 echo "MySQL Dump End: $(date)" >> ${LOG}
echo "Report Successful: $(date)"

这会将我的 MySQL 查询输出到一个“TAB”分隔文件 report.csv。但是,我需要将其输出到以“COMMA”分隔的文件。我意识到我可以创建另一个脚本来将此文件从 TAB 转换为逗号分隔,但是,如果可以的话,我宁愿保存该步骤。那么如何让 MySQL 以逗号分隔格式转储文件?

编辑: 我确实找到了这个解决方案:How do you output MySQL query results in csv format (to the screen, not to a file)?

但是我似乎无法让它工作:

echo "SELECT CONCAT_WS(',', ${MYSQLTABLE}.created_at, ${MYSQLTABLE}.product_options) FROM ${MYSQLTABLE} WHERE ${MYSQLTABLE}.product_id=1 ORDER BY ${MYSQLTABLE}.created_at" | mysql ${MYSQLOPTS} > ${MYSQLDUMP}

不起作用:(

最佳答案

运行以下命令:

echo "SELECT CONCAT_WS(',', ${MYSQLTABLE}.created_at, ${MYSQLTABLE}.product_options) FROM ${MYSQLTABLE} WHERE ${MYSQLTABLE}.product_id=1 ORDER BY ${MYSQLTABLE}.created_at" | \
mysql ${MYSQLOPTS}  | tr '\t' ',' > ${MYSQLDUMP}

tr命令将一个字符替换为另一个字符。

关于BASH MySQL 查询以逗号分隔的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1452336/

相关文章:

bash - awk 在使用三个 && 条件保存文件时更改字段分隔符

Bash:来自标准输出的整数值的总和

PHP MySQL 通过 PDO : mysql_result() substitute not working when called more than once

php - 使用 mysql_fetch_array() 生成的数组在使用后消失?

python - 将多个词典写入 csv 文件?

postgresql - 如何在 Postgresql 中导入 csv 时出错

bash - perl 和 bash 外部命令区别

bash - 从文件中删除重复的行 block

php - 比较 Billing Software 中的产品状态

csv - 在 SAS 中使用 PROC IMPORT 与不带标题或逗号的 CSV 文件