2017-04-18 63 views
0

我有一個主目錄和幾個子文件夾。每個子文件夾都包含一個* .fna文件,我希望我的腳本使用fna文件執行該命令並將輸出寫回到子文件夾中。 現在我的腳本已經在主目錄中創建了一個大文件,但我希望每個子文件夾中的每個子文件夾的輸出。使用find後Shell命令在子文件夾中保存輸出?

find * |grep fna$ |while read fna ; do formatdb -i $fna -p F ; blastall -p blastn/ 
-d $fna -i plasmiddb_genes_renamed.fsa -m 8 -e 1E-30 |while read hit ; do echo/ 
$fna $hit ; done ; done > $fna.blast_plasmidrefdb.out 

回答

0

夫婦的方式

  • $ FNA值的dirname

    找到* | grep的FNA $ |閱讀的同時FNA;做fdir = dirname $fna; formatdb -i $ fna -p F; blastall -p blastn/ -d $ fna -i plasmiddb_genes_renamed.fsa -m 8 -e 1E-30 | while read hit; do echo/ $ fna $ hit | tee $ {fdir} /out.txt;完成;完成> $ fna.blast_plasmidrefdb.out

  • 使用$ FNA路徑帶有後綴:例如$ {fna} .out

    find * | grep fna $ | while read fna;做formatdb -i $ fna -p F; blastall -p blastn/ -d $ fna -i plasmiddb_genes_renamed.fsa -m 8 -e 1E-30 | while read hit; do echo/ $ fna $ hit | tee $ {fna} .out;完成;完成> $ fna.blast_plasmidrefdb.out

使用| tee如果你想在一個文件還捕獲靜止。

壓縮one liner

在$ FNA(發現型的F -name 「* .fna」。);做formatdb -i $ fna -p F; blastall -p blastn/-d $ fna -i plasmiddb_genes_renamed.fsa -m 8 -e 1E-30 | tee $ {fna} .out;做

0

如果您find支持它,使用-execdir:

find . -name '*.fna' -execdir sh -c '{ 
    formatdb -i $0 -p F; blastall -p blastn -d $0 \ 
     -i /path/to/plasmiddb_genes_renaed.fsa -m 8 -e 1E-30; 
    } > $0.output' {} \; 

這將產生一個輸出文件,每個*在包含* .fna文件的目錄.fna文件。請注意,您需要使用質粒pdb_genes_renaed.fsa的完整路徑。

相關問題