我有一个包含多个子文件夹的主目录。每个子文件夹都包含一个* .fna文件,我希望我的脚本使用fna文件执行命令,并将输出写回子文件夹。 正如我的脚本现在,它在主目录中生成一个大文件,但我希望每个子文件夹中的每个子文件夹的输出。
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 :(得分:0)
几种方式
dirname
在阅读fna时找到* | grep 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;回声/ $ fna $ hit | tee $ {fdir} /out.txt ;完成完成> $ fna.blast_plasmidrefdb.out
在阅读fna时找到* | grep fna $ |;做formatdb -i $ fna -p F; blastall -p blastn / -d $ fna -i plasmiddb_genes_renamed.fsa -m 8 -e 1E-30 | while read hit;回声/ $ fna $点击 | tee $ {fna} .out ;完成完成> $ fna.blast_plasmidrefdb.out
使用了| tee
,以防你还想在一个文件中捕获。
压缩one liner
甚至更多
for fna in $(find。-type 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;完成
答案 1 :(得分: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文件生成一个输出文件。请注意,您需要使用plasmiddb_genes_renaed.fsa的完整路径。