You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为GNU parallel的每个任务添加Yes/No交互式确认提示?

用GNU Parallel批量合并文件时,如何让每个任务等待用户确认后再执行?

我有大量需要合并的测序文件,先用这段Bash代码生成了示例文件:

for lane in $(seq 1 4)
do
    for sub in $(seq 1 8)
    do
        echo "sublib ${sub}, lane ${lane}, R1" > S${sub}_L00${lane}_R1.fastq.gz
        echo "sublib ${sub}, lane ${lane}, R2" > S${sub}_L00${lane}_R2.fastq.gz
    done
done

因为实际文件体积很大,我写了一个shell函数打算用GNU Parallel来并行合并,但希望每个任务执行前弹出Yes/No确认,先核对待合并的文件是否正确。但GNU Parallel是并行执行的,能不能让每个任务暂停下来,等我逐个串行确认后再执行?

我自己写的函数代码如下:

export FQ_DIR="/volume-general/test-fastqs/concat-demo/"
function concat_fq () {
    files=$(find ${FQ_DIR} -type f -name "${1}_L*R${2}*")
    printf "Files to concatenate:
$files

"
    read -p "Proceed? [y/n]?" yn
        case $yn in
            [Yy]* ) cat "$files" > ${FQ_DIR}${1}_cat_R${2}.fastq.gz;;
            [Nn]* ) echo "Aborting.";;
        esac
}

export -f concat_fq

# example run
parallel -k --lb concat_fq {} ::: S1 S2 ::: 1 2

解决方案

核心是强制GNU Parallel串行执行任务,同时保留交互能力:

给parallel命令加上--jobs 1(可简写为-j1)参数,限制同时只运行1个任务,这样每个任务会依次启动,到需要确认的步骤时会暂停等待你的输入。修改后的执行命令:

parallel -k --lb -j1 concat_fq {} ::: S1 S2 ::: 1 2

补充说明

  • -j1:强制串行执行,确保一个任务完成(包括等待用户确认)后再启动下一个;
  • 串行模式下,函数里的read命令能正常捕获终端输入,因为Parallel会把每个任务的标准输入连接到当前终端;
  • 后续如果不需要确认了,去掉-j1就能回到并行模式,提升大文件合并的效率。

内容的提问来源于stack exchange,提问作者Danny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 23:24:56