是否可以在并行进程上分配STDIN?

Eri*_*rik 8 parallel-processing bash stdin process xargs

给出STDIN上的以下示例输入:

foo
bar bar
baz
===
qux
bla
===
def
zzz yyy
Run Code Online (Sandbox Code Playgroud)

是否可以将它拆分为分隔符(在本例中为'===')并通过stdin将其提供给并行运行的命令?

因此上面的示例输入将导致3个并行进程(例如,名为do.sh的命令),其中每个实例都接收STDIN上的一部分数据,如下所示:

do.sh(实例1)通过STDIN接收:

foo
bar bar
baz
Run Code Online (Sandbox Code Playgroud)

do.sh(实例2)通过STDIN接收:

qux
bla
Run Code Online (Sandbox Code Playgroud)

do.sh(实例3)通过STDIN接收:

def
zzz yyy
Run Code Online (Sandbox Code Playgroud)

我想这样的事情可能使用xargs或GNU parallel,但我不知道如何.

Ole*_*nge 12

GNU Parallel可以从版本20110205执行此操作.

cat | parallel --pipe --recend '===\n' --rrs do_stuff
Run Code Online (Sandbox Code Playgroud)

  • 这个答案可以使用更多解释:`pipe` 导致并行写入标准输入而不是传递参数,`recend` 是记录结束,即拆分字符串,而`rrs` 代表删除记录开始,即删除`'= ==\n'`。除此之外,`--keep-order` 很有用。 (3认同)