首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析脚本外壳的一部分

解析脚本外壳的一部分
EN

Stack Overflow用户
提问于 2019-04-01 23:52:22
回答 1查看 76关注 0票数 1
代码语言:javascript
复制
#!/bin/bash
for tracelength in 10 20 50 100 ; do
    step=0.1
    short=0
    long=1
    for firstloop in {1..10}; do
        ratio=0
        for secondloop in {1..10} ; do
            for repeat in {1..20} ; do
               echo $tracelength $short $long $ratio >results.csv
               python3 main.py "$tracelength" "$short" "$long" "$ratio" > file.smt2                     
               /usr/bin/time /Users/Desktop/optimathsat-1.5.1-macos-64-bit/bin/optimathsat < file.smt2 > results.csv
            done
            ratio=$(echo "scale=10; $ratio + $step" | bc)
        done
        short=$(echo "scale=10; $short + $step" | bc)
        long=$(echo "scale=10; $long - $step" | bc)
    done
done

我想并行内部循环(重复)。

我已经安装了GNU并行,我知道一些基本知识,但是由于循环有多个命令,所以我不知道如何并行化它们。

我将循环的内容转移到另一个脚本,我想这是可行的,但我的3个命令需要接受变量(tracelengthratioshortlong)并根据它们运行。是否知道如何将参数从脚本传递给下标。或者你对并行化有一个更好的想法?

我正在编辑这个问题,因为我使用了下面的答案,但是现在我的执行时间总是0.00,没有file.smt2有多大。

这是新版本的代码:

代码语言:javascript
复制
 #!/bin/bash
    doone() {
        tracelength="$1"
        short="$2"
        long="$3"
        ratio="$4"
        #echo "$tracelength $short $long $ratio" >> results.csv
        python3 main.py "$tracelength" "$short" "$long" "$ratio" >> file.smt2
        gtime -f "%U" /Users/Desktop/optimathsat-1.5.1-macos-64-bit/bin/optimathsat < file.smt2
    }
    export -f doone
    step=0.2
    parallel doone \
             ::: 200 300 \
             :::: <(seq 0 $step 0.5) \
             ::::+ <(seq 1 -$step 0.5) \
             :::: <(seq 0 $step 0.5) \
             ::: {1..5} &> results.csv
EN

回答 1

Stack Overflow用户

发布于 2019-04-02 10:13:31

在您的原始代码中,您一次又一次地重写results.csv。我认为这是一个错误,您希望将它合并到一个大的and文件中:

代码语言:javascript
复制
doone() {
    tracelength="$1"
    short="$2"
    long="$3"
    ratio="$4"
    echo "$tracelength $short $long $ratio"
    python3 main.py "$tracelength" "$short" "$long" "$ratio" |
        /usr/bin/time /Users/Desktop/optimathsat-1.5.1-macos-64-bit/bin/optimathsat
}
export -f doone
step=0.1
parallel doone \
         ::: 10 20 50 100 \
         :::: <(seq 0 $step 0.9) \
         ::::+ <(seq 1 -$step 0.1) \
         :::: <(seq 0 $step 0.9) \
         ::: {1..20} > results.csv

如果您希望每次运行一个run文件:

代码语言:javascript
复制
parallel --results outputdir/ doone \
         ::: 10 20 50 100 \
         :::: <(seq 0 $step 0.9) \
         ::::+ <(seq 1 -$step 0.1) \
         :::: <(seq 0 $step 0.9) \
         ::: {1..20}

如果您想要一个包含参数和运行时的csv文件,请使用:

代码语言:javascript
复制
parallel --results output.csv doone \
         ::: 10 20 50 100 \
         :::: <(seq 0 $step 0.9) \
         ::::+ <(seq 1 -$step 0.1) \
         :::: <(seq 0 $step 0.9) \
         ::: {1..20}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55465069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档