如何在 Bash 中将输出拆分到 3 个以上的并行进程中?

如何在 Bash 中将输出拆分到 3 个以上的并行进程中?

如何stdout在一个阅读步骤中分成几个并行过程? grep/sed只是一个例子?

file AAA
AAA
BBB
CCC
DDD
EEE
FFF
cmd1 ($ cat AAA ) -----+---- cmd2 ( eg. grep "A" > fileA.txt ) ----->>
                       |
                       +---- cmd3 ( eg. sed -n -e '/^A/,/^D/p' > fileB.txt--->>
                       |
                       +---- cmd4 ( eg. grep "C" > fileC.txt ) ---->>
                       |
                       +---- cmd5 ( eg. grep "F" > fileF.txt ) ---->>

答案1

paf1 的评论是最小的解决方案。

这比较长,但是它可以让您控制 GNU Parallel:

cat AAA |
  parallel --pipe --tee ::: 'grep "A" > fileA.txt' "sed -n -e '/^A/,/^D/p' > fileB.txt" 'grep "C" > fileC.txt' 'grep "F" > fileF.txt'

因此你可以做类似的事情:

cat AAA |
  parallel --pipe --tee grep {} '>' file{}.txt ::: A B C D E

或者:

cat AAA |
  parallel --pipe --tee --tag grep {} ::: A B C D E

如果您运行的输入接收器多于 3 个,那么这通常更容易读取。

相关内容