最常用的Linux循環(huán)應該是for和while,記錄兩個直接輸入command的實例(輸出Ta開頭的所有文件名字):
for i in Ta*;do echo $i;done
ls Ta* | while read id;do echo $id;done
開始正片:使用同一個query批量blast文件夾下所有的".fa"文件。
使用一個shell腳本,可以用vim創(chuàng)建,也可以使用vscode等記事本軟件來寫。
# 遍歷所有的fa文件
for i in *.fa;
do
# 輸出正在執(zhí)行的fa的名字
echo $i
# 構(gòu)建blast database,“> $i.log 2>&1”: 把輸出到terminal的內(nèi)容保存到log文件
makeblastdb -in $i -dbtype prot -out $i.db > $i.log 2>&1
# 進行blast
blastp -query OsBGL.seq -db $i.db -out $i.BGL.blast -outfmt 6 -evalue 1e-10 -num_threads 3 > $i.blast.log 2>&1
done
平時一條一條blast的時候,習慣在命令后加&,掛到后臺,這里不能帶&,特別是makeblastdb的時候,因為掛到后臺立刻執(zhí)行blast,是沒有database可以用的。
然后想取所有blast結(jié)果的前3行,并整合到一個文件
# 創(chuàng)建空文件
touch blast_top3.txt
# 遍歷所有的blast文件
for i in *.blast;
do
# 輸出正在執(zhí)行的fa的名字
echo $i
# head取前3行
head -3 $i >> top3.blast
done