bash进程替换中的GNU并行参数占位符

bash进程替换中的GNU并行参数占位符,bash,gnu-parallel,process-substitution,Bash,Gnu Parallel,Process Substitution,我有下面的GNU并行命令 parallel --gnu --jobs 4 \ normalize-by-median.py \ -k 20 -C 20 --paired -N 4 -x 6e9 \ --out pdom-{}-diginorm.fq \ pdom-{}.fq.gz \ ::: 200bp 500bp 1kb 3kb 8kb 我想在写入磁盘之前压缩输出。通常我只是将其通过管道传输到gzip-c,但不幸的是,这个特定的

我有下面的GNU并行命令

parallel --gnu --jobs 4 \
    normalize-by-median.py \
        -k 20 -C 20 --paired -N 4 -x 6e9 \
        --out pdom-{}-diginorm.fq \
        pdom-{}.fq.gz \
    ::: 200bp 500bp 1kb 3kb 8kb
我想在写入磁盘之前压缩输出。通常我只是将其通过管道传输到
gzip-c
,但不幸的是,这个特定的Python脚本没有将输出发送到stdout的选项。然后我想我可以用过程替代。我尝试了以下方法

parallel --gnu --jobs 4 \
    normalize-by-median.py \
        -k 20 -C 20 --paired -N 4 -x 6e9 \
        --out >(gzip -c - > pdom-{}-diginorm.fq.gz) \
        pdom-{}.fq.gz \
    ::: 200bp 500bp 1kb 3kb 8kb
但是,后一个示例中的大括号由子流程逐字解释,而不是作为GNU并行参数的占位符。有什么办法可以让它工作吗?

你的问题是>()在GNU并行程序启动之前就被解释了。因此,您需要引用这一点,以将其提供给GNU Parallel:

parallel --gnu --jobs 4 \
    normalize-by-median.py \
        -k 20 -C 20 --paired -N 4 -x 6e9 \
        --out '>(gzip -c - > pdom-{}-diginorm.fq.gz)' \
        pdom-{}.fq.gz \
    ::: 200bp 500bp 1kb 3kb 8kb
对于版本>20140822,您可以执行以下操作:

parallel --plus --gnu --jobs 4 \
    normalize-by-median.py \
        -k 20 -C 20 --paired -N 4 -x 6e9 \
        --out '>(gzip > {..}-diginorm.fq.gz)' \
        {} \
    ::: pdom-*