저는 생물정보학 도구인 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.db
First10
testdatabase1.db.txt
testdatabase2.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에서 처리된 파일 이름을 얻고 매 반복마다 이름을 변경합니다.