2015-09-17 129 views
1

我試圖使用GNU並行執行多個LOAD DATA LOCAL INFILE MySQL的命令,其中:GNU平行MySQL的LOAD DATA LOCAL INFILE

  • {1}是文件的,我從UNIX find命令管道獲取名稱
  • {2}chop.pl腳本,按照一定的規則

看來,我打電話GNU平行正確的方法,但它01從文件字符串打印出一定的令牌結果不會在 -e之後的mysql命令周圍保留雙引號,並且導致它不起作用。

E.g.

find /my/folder/ -name "*.txt" | while read i; do chop.pl $i; echo $i; done | parallel -t -N 2 mysql -h localhost -uuser -pxxxxxxx --local-infile=1 -D dbname -e "LOAD DATA LOCAL INFILE '{2}' IGNORE INTO TABLE tblname IGNORE 1 LINES (col1,col2,col3,col4) set col5='{1}', col6='foo'"

它正在嘗試,缺乏雙引號的命令-e後,就像這樣:

mysql -h localhost -uuser -pxxxxxxx --local-infile=1 -D dbname -e LOAD DATA LOCAL INFILE '/my/file/name/yadda_yadda-12345678.txt' IGNORE INTO TABLE tblname IGNORE 1 LINES (col1,col2,col3,col4) set col5='yadda_yadda', col6='foo'

任何想法如何在-e後加回雙引號?

回答

0

回答我的問題,解決辦法是逃避所有雙引號,單引號和括號的跡象:

find /my/folder/ -name "*.txt" | while read i; do chop.pl $i; echo $i; done | parallel -t -N 2 mysql -h localhost -uuser -pxxxxxxx --local-infile=1 -D dbname -e \"LOAD DATA LOCAL INFILE \'{2}\' IGNORE INTO TABLE tblname IGNORE 1 LINES \(col1,col2,col3,col4\) set col5=\'{1}\', col6=\'foo\'\"

+1

-q可能會在這種情況下工作過,太。 –