我有一個文件(fasta),我使用awk從(帶有標題的序列)中提取所需的字段。然後,我將它傳給一個BLAST程序,最後我將它傳遞給qsub以提交一份工作。 文件:如何使用awk和條件管道提交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
或基本上是:>頭\ nSEQUENCE 一個接一個,並將其傳送到可以採用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
注意,如果標準輸入序列通過管道輸送到它的-query標誌是不必要的。然而,對我來說,主要問題是如何合併我上面提到的條件,以便只有當qstat結果低於閾值時纔會將序列傳送到qsub。理想情況下,如果qstat結果高於閾值,它會睡覺,直到我低於,然後傳遞它。
謝謝。
如果'qsub'在後臺運行,你不能只用'ps ax | grep -wc'[q] sub''?或者,比僅僅不運行作業更好,爲什麼不將它們提交到隊列中,然後編寫一個隊列運行器,在前200個作業中生成'qsub',然後在舊作業完成時生成新實例?當然,這將是一個完全不同的問題。 – ghoti
您的第一個awk調用不會進行過濾:它會打印整個文件,就像cat一樣。實際上,根本不使用awk命令的輸出:echo命令不會從標準輸入(本例中爲管道)獲取輸入。也許,你告訴我們你試圖完成什麼:輸入是什麼樣的,輸出應該是什麼。 –
@HaiVu我在上面添加了一些關於我的問題的更多信息。謝謝。 –