在bash中并行嵌套for循环

时间:2014-07-22 12:59:40

标签: bash nested-loops

我正在尝试通过bash运行c可执行文件。可执行文件将在每次迭代中使用不同的参数,我想并行执行,因为我有12个可用的核心。

我试过

w=1;
for i in {1..100}
do
l=$(($i-1));
for j in {12*l..12*i}
do
./run $w/100 > "$w"_out &
done
expr=$w % 12;
if ["$expr" -eq "0"]
then wait;
fi;
done

run是c可执行文件。我希望在每个步骤中使用增加的参数w来运行它,并且我想等到所有进程完成后如果正在使用12个核心。基本上,我会同时运行12个可执行文件,然后等到它们完成,然后转到下一个12。

希望我明白我的观点。

干杯。

1 个答案:

答案 0 :(得分:3)

改为使用gnu parallel

parallel ./myscript {1} ::: {1..100}

您可以使用-P选项指定并行进程数,但默认为系统中的核心数。

您还可以指定-k以保持输出顺序并重定向文件。

要将输出重定向到单个文件,您可以指定输出重定向,但必须引用它,以便shell不会对其进行解析。例如:

parallel ./run {1} '>' {1}_out ::: {1..10}

相当于将./run 1 > 1_out投放到./run 10 > 10_out

相关问题