awk を使用して必要なフィールド (ヘッダーを含むシーケンス) を抽出するファイル (fasta) があります。それを 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 1 つずつ、stdin を取ることができる blast プログラムにパイプします。シーケンスごとに一意のジョブを作成したいので、シーケンスごとに qsub にパイプする必要があります。簡単に言うと、qsub の送信は次のようになります。
qsub -q S /Local/ncbi-blast-2.2.25+/bin/blastx -db blastdb.fa -query FASTA_SEQUENCE -outfmt 5 >> /User/blastresult.xml
stdin シーケンスがパイプされている場合、-query フラグは不要であることに注意してください。ただし、私にとっての主な問題は、qstat の結果がしきい値を下回った場合にのみシーケンスが qsub にパイプされるように、上記の条件を組み込む方法です。理想的には、qstat の結果がしきい値を超えている場合は、i が下回るまでスリープ状態になり、それを前方に渡します。
ありがとう。