在Bash进程替换中使用GNU Parallel参数占位符

3

我有以下的GNU parallel命令。

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 脚本没有将输出发送到标准输出的选项。于是我想到可以使用进程替换。我尝试了以下方法。

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 parallel参数的占位符。有没有办法让这个工作?

1个回答

4

你遇到的问题是在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-*

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接