Para loops no Bash

0

Estou executando a ferramenta de bioinformática hmmer e gostaria de executá-la para mais de 7000 consultas de sequência de teste. Depois que ele executar cada um, eu gostaria que ele salvasse a saída em um arquivo de texto, o que é bastante fácil.

Estou tentando criar um loop no bash que executaria o hmmer em cada sequência de teste na pasta e gravaria a saída em seu próprio arquivo de texto.

Como se escreve uma instrução dentro do loop for para que ela grave em um arquivo de texto diferente toda vez que o loop for executado?

Atualmente, meu código é assim

for i in First10/*; do

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

done
    
por adam.flint1844 20.06.2017 / 22:00

2 respostas

1

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

Não tenho certeza sobre o comando que você está executando no loop. Mas acho que minha resposta pode satisfazer sua exigência.

Ele criará um novo arquivo de saída em cada loop. ** i.e: Se você tiver dois arquivos chamados database1.db e database2.db in First10 directory, no primeiro loop ele criará a saída testdatabase1.db.txt e testdatabase2.db.txt no segundo loop.

    
por 20.06.2017 / 22:46
0
 #!/bin/bash
 cd First10 
  for filename in *; do

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

  done
 cd $OLDPWD

Assim, você terá o nome do arquivo processado no log de pontos do nome do arquivo de log, alterando seu nome para cada iteração.

    
por 20.06.2017 / 22:49