使用bash生成数字和字符序列

时间:2014-12-24 00:43:25

标签: bash shell awk

我编写了一个接受两个文件作为输入的脚本。我想在不同的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命令组合字母和数字。

2 个答案:

答案 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

节日快乐!