【问题标题】:Generating sequences of numbers and characters with bash使用 bash 生成数字和字符序列
【发布时间】:2015-12-22 22:52:13
【问题描述】:

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

【问题讨论】:

    标签: bash shell awk


    【解决方案1】:
    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。

    使用&amp; 将它们置于后台是最简单的并行方式。如果您真的想对大量类似的后台作业进行任何类控制,您将需要某种框架,例如 GNU Parallel。

    【讨论】:

    • tnx 为您的回复。我已经运行第一个没有等待,可以吗?
    • 一运行就停不下来了,还有没有更多的控制权?
    【解决方案2】:

    您可以使用纯 bash 来生成序列:

    printf "%s %s\n" x{00..30}.{A..B} | xargs -n1 -P 30 ./script
    

    节日快乐!

    【讨论】:

    • tnx @rottweilers_anonymous。三输入怎么样。像 ./script x00.A x00.B x00.C !我尝试了很多,但我不能
    • @EpiMan printf "%s %s %s\n" x{00..30}.{A..B}
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-14
    • 1970-01-01
    • 2018-11-24
    • 1970-01-01
    • 2011-04-14
    • 2017-02-02
    • 2023-02-20
    相关资源
    最近更新 更多