我编写了一个接受两个文件作为输入的脚本。我想在不同的CPU上同时并行运行。
输入:
x00.A x00.B
x01.A x01.B
...
x30.A x30.B
而不是跑30次:
./script x00.A x00.B
./script x01.A x01.B
...
./script x30.A x30.B
我想使用paste和seq生成并将它们发送到脚本。
paste & seq | xargs -n1 -P 30 ./script
但我不知道如何使用paste和seq命令组合字母和数字。
答案 0 :(得分:2)
for num in $(seq -f %02.f 0 30); do
./script x$num.A x$num.B &
done
wait
虽然我个人更喜欢不使用GNU seq或BSD jot但是(ksh / bash)内置:
num=-1; while (( ++num <= 30 )); do
./script x$num.A x$num.B &
done
wait
最后wait
只需要确保它们在后台运行可用的CPU核心后完成所有操作。因此,如果您需要./script
的输出,则必须保留wait
。
使用&
将它们放入后台是并行操作的最简单方法。如果你真的想对这样的许多后台工作进行任何控制,你将需要某种类似GNU Parallel的框架。
答案 1 :(得分:0)
您可以使用纯bash生成序列:
printf "%s %s\n" x{00..30}.{A..B} | xargs -n1 -P 30 ./script
节日快乐!