从 stdin 读取变量时如何在 bash 中使用 GNU parallel?
How to use GNU parallel in bash while reading variables from stdin?
我正在尝试调整以下代码行以与 GNU parallel 一起使用:
for ID in $(cut -f1 markers.tsv);
do echo $ID;
FAA=${ID}.faa.gz
zcat ${FAA} | muscle -out ${ID}.msa
done
最好不要创建中间脚本。
但是,我看到的例子 here 没有显示我可以在哪里使用我的 ${ID}
参数。
这可能是一对一的班轮:
for ID in $(cut -f1 markers.tsv);
do echo $ID && FAA=${ID}.faa.gz && zcat ${FAA} | muscle -out ${ID}.msa
done
我正在尝试这个,但它似乎不是 运行 同时工作:
cut -f1 markers.tsv | parallel -j 16 -I @ 'echo "@" && FAA="@.faa.gz" && zcat $FAA | muscle -out @.msa'
有人可以帮助我正确使用 16 个作业来适应这个吗?
示例markers.tsv
PF00709.21\t1\ta
PF00406.22\t2\tb
PF01808.18\t3\tc
类似
parallel --jobs 16 -a markers.tsv -C '\t' 'echo {1} && zcat {1}.faa.gz | muscle -out {1}.msa'
应该可以。使用 markers.tsv
作为输入文件,使用制表符分隔的列,当 运行 每行的命令时,将命令中的 {1}
替换为第一列的值。
因为听起来这些列真的非常长,而且您 运行 受到最大命令行长度限制,您可能更幸运地将大部分您想做的事情放在一个函数中(或脚本文件):
# Assuming bash
dowork() {
echo ""
zcat ".faa.gz" | muscle -out ".msa"
}
export -f dowork
parallel --jobs 16 -a markers.tsv -C '\t' dowork '{1}'
由于 GNU Parallel 中的错误,输入行不能超过最大命令行长度。
cut -f1 markers.tsv |
parallel -j16 'echo {} && zcat {}.faa.gz | muscle -out {}.msa'
我正在尝试调整以下代码行以与 GNU parallel 一起使用:
for ID in $(cut -f1 markers.tsv);
do echo $ID;
FAA=${ID}.faa.gz
zcat ${FAA} | muscle -out ${ID}.msa
done
最好不要创建中间脚本。
但是,我看到的例子 here 没有显示我可以在哪里使用我的 ${ID}
参数。
这可能是一对一的班轮:
for ID in $(cut -f1 markers.tsv);
do echo $ID && FAA=${ID}.faa.gz && zcat ${FAA} | muscle -out ${ID}.msa
done
我正在尝试这个,但它似乎不是 运行 同时工作:
cut -f1 markers.tsv | parallel -j 16 -I @ 'echo "@" && FAA="@.faa.gz" && zcat $FAA | muscle -out @.msa'
有人可以帮助我正确使用 16 个作业来适应这个吗?
示例markers.tsv
PF00709.21\t1\ta
PF00406.22\t2\tb
PF01808.18\t3\tc
类似
parallel --jobs 16 -a markers.tsv -C '\t' 'echo {1} && zcat {1}.faa.gz | muscle -out {1}.msa'
应该可以。使用 markers.tsv
作为输入文件,使用制表符分隔的列,当 运行 每行的命令时,将命令中的 {1}
替换为第一列的值。
因为听起来这些列真的非常长,而且您 运行 受到最大命令行长度限制,您可能更幸运地将大部分您想做的事情放在一个函数中(或脚本文件):
# Assuming bash
dowork() {
echo ""
zcat ".faa.gz" | muscle -out ".msa"
}
export -f dowork
parallel --jobs 16 -a markers.tsv -C '\t' dowork '{1}'
由于 GNU Parallel 中的错误,输入行不能超过最大命令行长度。
cut -f1 markers.tsv |
parallel -j16 'echo {} && zcat {}.faa.gz | muscle -out {}.msa'