将Xargs max-procs与文件中的多个参数一起使用

时间:2017-07-12 17:22:27

标签: linux bash while-loop xargs

我有一个脚本可以让我得到我想要的结果。我想提高脚本的性能。

我的脚本从文件file1.txt获取参数。

内容如下:

table1
table2
table3
and so on

现在当我使用下面的while语句时,脚本按顺序运行。

while声明如下:

while IFS=',' read -r a; do import.sh "$a"; done <  file1.txt

现在,当我在bash中使用xargs max-procs实用程序时,脚本基于no-procs并行运行。

xargs声明如下:

xargs --max-procs 10 -n 1 sh import.sh <  file1.txt

现在我有另一个脚本

此脚本接收来自文件file2.txt的参数。

内容如下:

table1,db1
table2,db2
table3,db3
and so on

当我使用while语句时,脚本运行良好。

while IFS=',' read -r a b; do test.sh "$a" "$b"; done <  file2.txt

但是当我使用teh xargs语句时,脚本会给我usage错误。

xargs声明如下。

xargs --max-procs 10 -n 1 sh test.sh <  file2.txt

error声明如下:

Usage : test.sh input_file

为什么会这样?

我该如何纠正这个?

1 个答案:

答案 0 :(得分:1)

你的第二个脚本test.sh需要两个参数,但是xargs只给它一个(一个词,在这个例子中是整行)。您可以通过先将逗号,转换为换行符(使用简单的sed脚本)然后将每个调用传递两个参数(现为两行)传递给test.sh-n2来修复它}):

sed s/,/\\n/g file2.txt | xargs --max-procs 10 -n2 sh test.sh

请注意,xargs通过-d选项支持自定义分隔符,如果file2.txt中的每一行都以,结尾,您可以使用它(但是你应该可能会删除每个第一个字段前缀的换行符。)