如何在Bash中使用GNU Parallel并从标准输入读取变量?
GNU Parallel 适配方案
直接使用如下命令即可实现16并行任务运行,无需创建中间脚本:
cut -f1 markers.tsv | parallel -j 16 'echo {} && zcat {}.faa.gz | muscle -out {}.msa'
原写法未生效的原因
- GNU Parallel 默认使用
{}作为输入行的占位符,无需额外用-I @指定替换规则,简化写法可以避免不必要的语法错误 - 原写法中
FAA变量的赋值属于冗余逻辑,直接用{}拼接文件名即可,减少变量传递可能带来的问题 - 无需额外对占位符做引号包裹,GNU Parallel 会自动处理常规输入内容的转义
调试方法
如果需要预先验证命令拼接是否正确,可以添加--dry-run参数打印所有将要执行的命令,确认无误后移除该参数即可正式运行:
cut -f1 markers.tsv | parallel -j 16 --dry-run 'echo {} && zcat {}.faa.gz | muscle -out {}.msa'
内容的提问来源于stack exchange,提问作者O.rka
相关产品推荐
相关产品推荐

