2

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

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

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

'/some/binary 201310/20131018'

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

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

3 回答 3

5

并行命令被解释为 shell 命令,所以你可以这样做

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

这将执行

/some/binary 201310/20131017
/some/binary 201310/20131018
于 2013-10-22T22:52:30.600 回答
1

从 20140722 开始,您可以:

parallel /some/binary '{=s/..$//=}'/{} ::: 20131017 20131018
于 2016-01-07T02:01:58.797 回答
0

对于纯粹的丑陋,不要忘记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以不期望这种不稳定的输入。

于 2013-10-23T22:15:57.707 回答