首先,由於我的MySQL用戶沒有在服務器上擁有FILE權限,我不得不使用下面的命令將我的SELECT語句輸出傳遞給shell中的文件,而不是直接在MySQL中使用它,並能夠使用INTO OUTFILE
& FIELDS TERMINATED BY '|'
,我猜測它可以解決我所有的問題。需要在SHELL的MySQL輸出中添加一個分隔符
所以,我有以下行搶我的領域:
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=|
後有望操縱塊中的數據。
當我得到它的工作時,有很多更多的可變長度和字數列pr列,所以我不能使用依賴位置來添加分隔符的方法。
我覺得數據首先被轉儲時需要設置分隔符。
我已經試過了諸如:
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個數據庫轉儲數據,比較時間戳並將最新數據寫回兩個數據庫。
concat_ws給我一個錯誤:調用本地函數'concat_ws'中的參數不正確 – guppshouse 2014-10-29 13:27:57
'|'後面只有一個逗號缺失。這工作,我很高興。非常感謝你。 – guppshouse 2014-10-29 13:39:55
上面加了缺少逗號,很抱歉,很高興我能幫上忙。 – evilive 2014-10-29 14:03:38