需要在SHELL的MySQL输出中添加分隔符

时间:2014-10-29 13:15:55

标签: mysql shell unix

首先,由于我的MySQL用户没有服务器上的FILE权限,我不得不使用下面的行将我的SELECT语句输出管道传输到shell中的文件,而不是直接在MySQL中执行它并且能够使用INTO OUTFILE&我猜的FIELDS TERMINATED BY '|'会解决我所有的问题。

所以我有以下一行来抓住我的字段:

echo "select id, UNIX_TIMESTAMP(time), company from database.table_name"  | mysql -h database.mysql.host.com -u username -ppassword  user > /root/sql/output.txt

这将输出以下3列:

63  1414574321  person one

50  1225271921  Another person

8   1225271921  Company with many names

10  1414574567  Person with Company

然后我在其他脚本中使用该数据来执行某些任务。

我的问题是,有些专栏,其中第三个专栏,'公司'就是一个例子,其数据中有空格,这意味着我的WHILE循环后来会被抛弃。

我想在输出中添加分隔符,所以它看起来像这样:

63|1414574321|person one

50|1225271921|Another person

8|1225271921|Company with many names

10|1414574567|Person with Company

这样我希望以后可以使用awk -F|IFS=|操作块中的数据。

当我使用它时,有许多列具有可变长度和单词数量的列,因此我不能使用依赖于位置的方法来添加分隔符。

我觉得首先要转储数据时需要设置分隔符。

我尝试过这样的事情:

echo "select (id, + '|' + UNIX_TIMESTAMP(time), + '|' + company) from database.table_name"  | mysql -h database.mysql.host.com -u username -ppassword  user > /root/sql/output.txt

没有运气,它只是将字符添加到输出文件的标题中。

有没有人看到我能做的解决方案?

如果有人想知道,我正在从2个数据库中转储数据,比较时间戳并将最新数据写回两个数据库。

1 个答案:

答案 0 :(得分:0)

您可以使用concat_ws函数每行接收一个连接字符串:

select concat_ws( '|', id, UNIX_TIMESTAMP(time) , company ) from database.table_name

编辑:添加了丢失的逗号,抱歉!