Executando um comando com múltiplas entradas para muitos arquivos

0

Eu preciso executar um programa usando 2 arquivos como entrada, esperando uma saída com 6000 arquivos, variando de abc0000.faa / abc0000.fna a abc6000.faa / abc6000.fna. Eu também preciso que o arquivo de saída tenha o mesmo nome de arquivo que as entradas, mas a extensão .paml.

Este é um exemplo do comando completo apenas para arquivos 0000.

./pal2nal.pl abc0000.faa abc0000.fna -codontable 11 -output paml > abc0000.paml

Existe uma maneira de executar o mesmo comando para todos os arquivos automaticamente? Algo como um para-em-fazer?

Obrigado!

    
por Manuel 02.07.2017 / 00:20

2 respostas

2

Você pode executar um loop de um dos conjuntos de arquivos de entrada (os arquivos .faa , por exemplo) e gerar o outro arquivo de entrada e os nomes dos arquivos de saída a partir deles:

for f in *.faa; do
    ./pal2nal.pl "$f" "${f%.faa}.fna" -codontable 11 -output paml > "${f%.faa}.paml"
done

A sintaxe ${f%word} remove o componente de trailing mais curto que corresponde a word .

    
por 02.07.2017 / 00:31
2

O comando

seq -w 0 6000

irá gerar todos os números de 0 a 6000; se um número tiver menos de quatro dígitos, ele será preenchido com 0s à esquerda. Você pode usar a substituição de comando para envolver seu comando em um loop:

for n in $(seq -w 0 6000) ;do
  ./pal2nal.pl abc$n.faa abc$n.fna -codontable 11 -output paml > abc$n.paml
done
    
por 02.07.2017 / 00:32