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

时间:2015-03-26 02:25:54

标签: 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,但遗憾的是这个特殊的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并行参数的占位符。有什么方法可以让它发挥作用吗?

1 个答案:

答案 0 :(得分:3)

你的问题是在GNU Parallel甚至启动之前解释了>()。因此,您需要引用它以将其提供给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-*