2

次の 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 並列引数のプレースホルダーとしてではなく、サブプロセスによって文字どおりに解釈されます。これを機能させる方法はありますか?

4

1 に答える 1

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-*
于 2015-03-26T07:53:42.837 に答える