2015-09-17 182 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可能会在这种情况下工作过,太。 –