Bash의 For 루프

Bash의 For 루프

저는 생물정보학 도구인 hmmer를 실행하고 있으며 이를 실행하여 7000개가 넘는 테스트 시퀀스를 쿼리하려고 합니다. 각각을 실행한 후 출력을 텍스트 파일로 저장하고 싶습니다. 이는 쉽게 수행할 수 있습니다.

폴더의 각 테스트 시퀀스에서 hmmer를 실행하고 출력을 자체 텍스트 파일에 쓰는 bash에서 for 루프를 만들려고 합니다.

루프가 실행될 때마다 다른 텍스트 파일에 쓰도록 for 루프 내에 명령문을 작성하려면 어떻게 해야 합니까?

현재 내 코드는 다음과 같습니다

for i in First10/*; do

binaries/jackhmmer --tblout test[i].txt -E1 --noali $i largedatabase.fasta

done

답변1

for i in First10/*; do
     binaries/jackhmmer --tblout test$(basename $i).txt -E1 --noali $i largedatabase.fasta
done

루프에서 어떤 명령을 실행하고 있는지 잘 모르겠습니다. 하지만 내 대답은 귀하의 요구 사항을 충족시킬 수 있다고 생각합니다.

모든 루프에서 새로운 출력 파일을 생성합니다. **즉, database1.db디렉토리에 and라는 이름의 두 개의 파일이 있는 경우 첫 번째 루프에서는 출력을 생성하고 두 번째 루프에서는 출력을 생성합니다.database2.dbFirst10testdatabase1.db.txttestdatabase2.db.txt

답변2

 #!/bin/bash
 cd First10 
  for filename in *; do

        ../binaries/jackhmmer --tblout "${filename}.log" -E1 --noali "$filename" largedatabase.fasta 

  done
 cd $OLDPWD

따라서 로그 파일 이름 dot log에서 처리된 파일 이름을 얻고 매 반복마다 이름을 변경합니다.

관련 정보