2013-08-07 3 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 프로그램이이 파일을 인식하지 못하기 때문에 작동하지 않습니다. 당신이 도울 수 있다면 정말 감사 할 것입니다. 당신이 14 개 파일이 정확이 알고있는 경우

답변

1

, 이렇게 :

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}.fasta 확장자가 제거 된 $file을 제공합니다.

변수에 파일 이름을 먼저 저장하려면 배열 변수를 사용하는 것이 가장 좋습니다. 변수 할당 주위에 괄호를 추가 한 다음 이상한 구문 "${array[@]}"으로 배열 값에 액세스하면됩니다.

files=(home/my_directory/*.fasta) 

for file in "${files[@]}"; do 
    clustalo -i "$file" -o "${file%.fasta}.aln" 
done 
+0

이 새로운 파일을 새 디렉토리에 저장할 수 있습니까? – user1997808

관련 문제