【问题标题】:GNU Parallel with sequence number `{#}` and `-n` option带有序列号“{#}”和“-n”选项的 GNU Parallel
【发布时间】:2021-03-17 11:33:31
【问题描述】:

在我的~/.parallel/config 中使用带有--rpl '{0#} $_=sprintf("%02d",$job->seq())' 的GNU Parallel 20210222,为什么会这样

seq 256 | parallel -n 64 echo {0#}

输出

01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02
03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03
04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04

而不是

01
02
03
04

seq 256 | parallel -n 64 echo {#}

输出

1
2
3
4

?

【问题讨论】:

    标签: gnu-parallel


    【解决方案1】:

    这并不奇怪:

    seq 10 | parallel -n 5 echo '{= $_=-$_ =}'
    

    与此相同:

    seq 10 | parallel --rpl '{-} $_=-$_' -n 5 echo {-}
    

    即:

    -1 -2 -3 -4 -5
    -6 -7 -8 -9 -10
    

    您可以通过添加要替换的参数的编号将 {-} 变成位置替换字符串:

    seq 10 | parallel --rpl '{-} $_=-$_' -n 5 echo {1-} {3-} {5-}
    

    给出:

    -1 -3 -5
    -6 -8 -10
    

    位置性可以是定义的一部分:

    seq 10 | parallel --rpl '{-} 1 $_=-$_' -n 5 echo {-}
    

    给出:

    -1
    -6
    

    {#}在源代码中定义为:

         '{#}'  => '1 $_=$job->seq()',
    

    所以这是一个位置替换字符串,只会被第一个值替换。

    这个

    {0#} $_=sprintf("%02d",$job->seq())
    

    不是位置替换字符串,而是每个输入都会被替换的普通替换字符串。

    但它可以很容易地变成一个位置:

    seq 256 | parallel --rpl '{0#} 1 $_=sprintf("%02d",$job->seq())' -n 64 echo {0#}
    seq 256 | parallel --rpl '{0#} $_=sprintf("%02d",$job->seq())' -n 64 echo {10#}
    

    最后一个看起来有点混乱,但那是因为我们人类会看到“10”而不是“1”(输入数字)后跟“0#”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-19
      • 1970-01-01
      • 2019-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多