2

GNU 並列コマンドを実行して、一連の日付を渡そうとしています。このようなものですが、より複雑なコマンドです。

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

これは機能しますが、日付が 2 つの異なる月にまたがる必要があり、コマンドは引数 20131018 に対して次のようになります。

'/some/binary 201310/20131018'

それで、議論の最初の部分を分割しました..どうすればこの効果を達成できますか? 私が想像するbash変数の観点から考える:

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

3 に答える 3

5

parallel のコマンドはシェル コマンドとして解釈されるため、次のように実行できます。

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 に答える