我有一个文件(fasta),我正在使用 awk 从(带有标题的序列)中提取所需的字段。然后我通过管道将其传输到 BLAST 程序,最后通过管道将其传输到 qsub 以提交作业。文件:
>sequence_1
ACTGACTGACTGACTG
>sequence_2
ACTGGTCAGTCAGTAA
>sequence_3
CCGTTGAGTAGAAGAA
和命令(有效):
awk < fasta.fasta '/^>/ { print $0 } $0 !~ /^>/' | echo "/Local/ncbi-blast-2.2.25+/bin/blastx -db blastdb.fa -outfmt 5 >> /User/blastresult.xml" | qsun -q S
我想做的是添加一个条件,如果它低于某个阈值,则将对我正在运行的作业数量(使用 qstat)进行采样,该作业将被提交。例如:
allowed_jobs=200 #for example
awk < fasta.fasta '/^>/ { print $0 } $0 !~ /^>/' | echo "/Local/ncbi-blast-2.2.25+/bin/blastx -db blastdb.fa -outfmt 5 >> /User/blastresult.xml" | cmd=$(qstat -u User | grep -c ".") | if [ $cmd -lt $allowed_jobs ]; then qsub -q S
不幸的是(无论如何对我来说)我所有的尝试都失败了。我会很感激任何帮助
编辑:详细说明:我想做的是从fasta文件中提取:
>sequene_x
ACTATATATATA
或者基本上: >HEADER\nSEQUENCE 一个接一个,并将其通过管道传输到可以采用标准输入的爆炸程序。我想为每个序列创建一个独特的作业,这就是我想为每个序列管道到 qsub 的原因。说白了,qsub 提交看起来像这样:
qsub -q S /Local/ncbi-blast-2.2.25+/bin/blastx -db blastdb.fa -query FASTA_SEQUENCE -outfmt 5 >> /User/blastresult.xml
请注意,如果标准输入序列通过管道传递给它,则 -query 标志是不必要的。但是,对我来说主要的问题是如何结合我上面提到的条件,以便仅当 qstat 结果低于阈值时,序列才会被传送到 qsub。理想情况下,如果 qstat 结果高于阈值,它将休眠直到 i 低于阈值,然后将其向前传递。
谢谢。