我编写了一个bash脚本,用于运行一个程序(Velveth),该程序将一个目录中的所有Fasta文件(.fa)作为输入,并在一个新目录中给出结果。
#!/bin/bash
for filename in /home/lpp/Desktop/test/*.fa; do
velveth outdirectory 21 -fasta -short "$filename"
done
我可以循环抛出所有fasta文件,但每次迭代都会在同一文件夹中重写结果。如何为每次迭代重命名输出目录?
我试着给相同的文件名:
#!/bin/bash
for filename in /home/lpp/Desktop/test/*.fa; do
velveth "$filename" 21 -fasta -short "$filename"
done
但是它不工作。
谢谢。
我建议您在使用该目录作为输出之前创建该目录,并且不要创建与文件名称相同的目录。如果您希望将输出放在与文件相同的目录中,我建议这样做:
#!/bin/bash
for filename in /home/lpp/Desktop/test/*.fa; do
mkdir ${filename%.*}
velveth ${filename%.*} 21 -fasta -short "$filename"
done
${filename%.*}
将删除文件的后缀,从而将foo.fa
变为foo
,这样您就不会创建与文件名称完全相同的目录…为文件foo.fa
创建目录foo
你可以尝试这样做:
I=0
for filename in /home/lpp/Desktop/test/*.fa; do
velveth outdirectory 21 -fasta -short "$filename"
mv "folder/result" "folder/result$I"
I=$I+1
done
它会创建result0
、result1
等文件
velveth
的第一个参数是输出目录,您提供的两个脚本都是错误的
#!/bin/bash
for filename in /home/lpp/Desktop/test/*.fa; do
velveth outdirectory 21 -fasta -short "$filename"
done
错误:所有
目录相同#!/bin/bash
for filename in /home/lpp/Desktop/test/*.fa; do
velveth "$filename" 21 -fasta -short "$filename"
done
错误:目录等于输出文件
velveth
创建输出目录,如果它不存在,所以我猜如果你传递一个基于文件名的参数不会有问题:
#!/bin/bash
for filename in /home/lpp/Desktop/test/*.fa; do
velveth "${filename%.*}" 21 -fasta -short "$filename"
done
给定一个输入文件/home/lpp/Desktop/test/test.fa
, velveth
将输出文件保存在目录/home/lpp/Desktop/test/test
中。
另一个选项可能是在文件名中"添加"一些内容,以便设置输出目录:
#!/bin/bash
for filename in /home/lpp/Desktop/test/*.fa; do
velveth "$filename.out" 21 -fasta -short "$filename"
done
给定一个输入文件/home/lpp/Desktop/test/test.fa
, velveth
将把输出文件保存在目录/home/lpp/Desktop/test/test.fa.out
中。