我做了一个用于运行程序(Velveth)的bash脚本,该程序将目录中的所有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
但它不起作用。
感谢。
答案 0 :(得分:0)
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
等文件,等等
答案 1 :(得分:0)
我建议你做的是在使用它作为输出之前创建directoy,也不要创建与文件名称相同的目录。如果您想将输出放在与文件相同的目录中,我建议您这样做:
#!/bin/bash
for filename in /home/lpp/Desktop/test/*.fa; do
mkdir ${filename%.*}
velveth ${filename%.*} 21 -fasta -short "$filename"
done
${filename%.*}
将删除文件的后缀,从而使foo
从foo.fa
中删除,这样您就不会创建与文件名完全相同的目录...创建目录文件foo
的{{1}}。
答案 2 :(得分:0)
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
中。