0

我是 bash 脚本的新手,但我想在 bash 脚本的 for 循环中将一些文件设置为变量。我有这个代码:

a=home/my_directory/*.fasta
b=home/my_directory/*.aln

for i in {1..14}   # I have 14 files in my_directory with file extension .fasta
do
clustalo -i $a -o $b  # clustalo is a command of Clustal Omega software, -i is 
                      # input file, -o is output file
done

我只想使用 my_directory 中的所有 fasta 文件并创建另外 14 个新的 aln 文件。但是使用此代码它不起作用,因为 Clustal 程序无法识别此设置文件。因此,如果您能提供帮助,我将不胜感激。

4

1 回答 1

1

如果您知道正好有 14 个文件,请执行以下操作:

for i in {1..14}; do
    clustalo -i home/my_directory/$a.fasta -o home/my_directory/$b.aln
done

如果要处理所有*.fasta文件,无论有多少文件,请执行以下操作:

for file in home/my_directory/*.fasta; do
    clustalo -i "$file" -o "${file%.fasta}.aln"
done

为了理解这一点,${file%.fasta}给我们剥离$file了扩展。.fasta

如果要先将文件名存储在变量中,最好的办法是使用数组变量。为此,您可以在变量赋值周围添加括号,然后使用奇怪的语法访问数组值"${array[@]}"

files=(home/my_directory/*.fasta)

for file in "${files[@]}"; do
    clustalo -i "$file" -o "${file%.fasta}.aln"
done
于 2013-08-07T17:47:29.543 回答