2013-08-07 33 views
0

我是bash腳本編寫的新手,但我想將某些文件設置爲bash腳本中for循環的變量。我有這樣的代碼:如何在bash中將文件設置爲變量

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程序不能識別這個集合文件。所以,如果你能幫助,我會非常感激。

回答

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 
+0

是否有可能將這些新文件保存到新目錄? – user1997808

相關問題