首先,由于我的 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=|
来操作 block 中的数据。
当我让它工作时,还有很多具有可变长度和字数的列要添加到列中,因此我无法使用依赖于位置的方法来添加分隔符。
我觉得在第一次转储数据时需要设置分隔符。
我尝试过以下方法:
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
没有任何运气,它只是将字符添加到输出文件的标题中。
有人能找到我能做的解决方案吗?
如果有人想知道,我正在从两个数据库转储数据,比较时间戳并将最新数据写回两个数据库。
最佳答案
您可以使用 concat_ws 函数来接收每行一个串联字符串:
select concat_ws( '|', id, UNIX_TIMESTAMP(time) , company ) from database.table_name
编辑:添加了缺少的逗号,抱歉!
关于mysql - 需要在SHELL的MySQL输出中添加分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26631380/