【问题标题】:GNU Parallel argument placeholder in bash process substitutionbash 进程替换中的 GNU 并行参数占位符
【发布时间】:2015-05-29 23:21:28
【问题描述】:

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

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 并行参数的占位符。有什么办法可以让它工作吗?

【问题讨论】:

    标签: bash gnu-parallel process-substitution


    【解决方案1】:

    您的问题是 >() 甚至在 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-*
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-25
      • 1970-01-01
      相关资源
      最近更新 更多