【问题标题】:How to pass part of an argument to a gnu parallel command如何将部分参数传递给 gnu 并行命令
【发布时间】:2016-01-07 10:01:58
【问题描述】:

我正在尝试运行一个 GNU 并行命令并向它传递一堆日期,类似这样的但更复杂的命令:

parallel '/some/binary {}' ::: 20131017 20131018

这行得通,但是我需要日期跨越两个不同的月份,参数 20131018 的命令应该如下所示:

'/some/binary 201310/20131018'

所以它分裂了论点的第一部分..我怎样才能达到这个效果?从我想象的 bash 变量的角度思考:

'/some/binary {:4}/{}' ::: 20130910 20131018 etc...

【问题讨论】:

    标签: bash parallel-processing gnu-parallel


    【解决方案1】:

    parallel 的命令被解释为 shell 命令,所以你可以这样做

    parallel --gnu 'var="{}"; /some/binary "${var:0:6}/$var"' ::: 20131017 20131018
    

    这将执行

    /some/binary 201310/20131017
    /some/binary 201310/20131018
    

    【讨论】:

      【解决方案2】:

      从 20140722 开始,您可以:

      parallel /some/binary '{=s/..$//=}'/{} ::: 20131017 20131018
      

      【讨论】:

        【解决方案3】:

        对于纯粹的丑陋,不要忘记 awk 将结果通过管道传输到并行处理数据:

        $ echo 20131017 > foo
        $ echo 20131018 >> foo
        $ awk '{printf "%s/%s\n", substr($1,0,4), $1}' foo | parallel echo
        

        除了丑陋之外,这是管道友好的。一个普通的print 和一些OFS 魔法会比printf 我怀疑的更干净。如果那是你的果酱,你可以交替使用sed

        也就是说,我会亲自修改 /some/binary,以免出现这种奇怪的输入。

        【讨论】:

          猜你喜欢
          • 2022-10-07
          • 1970-01-01
          • 2013-10-11
          • 1970-01-01
          • 2012-09-01
          • 2020-08-02
          • 2014-01-13
          • 2020-09-02
          相关资源
          最近更新 更多