如何使用 xargs 执行多行

如何使用 xargs 执行多行

我有一个很大的 SQL 转储,每行有 1 个插入语句。我希望能够将其通过管道传输到 xargs,以便减慢写入速度。基本上,我想执行多行,休眠,然后继续执行,依此类推。

我目前有这个:

cat file.sql | xargs -n50 -d "\n" sh -c '(echo "$@" | mysql db_name); sleep 10'

但问题是,我相信文件中的某个地方有一个\n导致 SQL 中断的问题。我正在使用INSERT IGNORE,这导致缺少行。

我不想浏览文件并修复\n。有没有办法用 line 代替\n

我试过了:

cat file.sql | xargs -L 50 sh -c '(echo "$@" | mysql db_name); sleep 10'

但我得到了:

xargs: unmatched single quote; by default quotes are special to xargs unless you use the -0 option

答案1

我实际上只会修改 SQL。MySQL 有一个SLEEP函数可供您选择。下面将每 50 行注入 10 秒延迟...然后只需将其输入到命令中即可mysql

awk '{print} NR%50==0 {print "SELECT SLEEP(10);"}' file.sql | mysql db_name

相关内容