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



我有以下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 --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-*

最新更新