bash + script híbrido PERL

1

Eu sou novo nessa comunidade, tentei encontrar respostas relevantes, mas não consegui encontrar nenhuma.

Minha pergunta é, eu quero usar o script perl em um diretório de arquivos que terminam com .fasta, se eu fizer no bash como

for i in *.fasta
do
perl script.pl
done

A pergunta é: Como posso usar a variável bash $ i value no script PERL. O script perl abre cada arquivo, executa certas funções em cada arquivo e o fecha. como

my $file1 = 'All-Sequences.fasta'; # I want to replace 'All-Sequences.fasta' with $i
open (FILE, $file);
my @file = <FILE>;
close FILE;
print @file;

Estas são funções exemplares.

    
por Hammad Mubeen 13.05.2017 / 11:13

2 respostas

1

Você pode acessar os parâmetros fornecidos para o script Perl com o array @ARGV, assim você pode fazer isso:

my $fileName = $ARGV[0];
your code...

E corra com:

for i in *.fasta
do
  perl script.pl "$i"
done

Você também pode encontrar os diretórios .fasta com uma função Perl e, em seguida, repetir esses resultados.

    
por 13.05.2017 / 12:04
0

A resposta fornecida pelo mtak é muito simples. Ele pode ser facilmente modificado para passar mais de um nome de arquivo, mas existe um sistema que depende do número de argumentos da linha de comando.

Se você preferir resposta ajustada para desempenho para enorme número de arquivos então você pode alimentar lista de arquivos via pipe entre bash (processo pai ) e perl (processo filho).
Evita iniciar o interpretador perl muitas vezes e atingir limites no número de argumentos da linha de comando.

script bash:

for i in *.fasta ; do
  echo $i
done | perl script.pl

script perl

while (<STDIN>) {
  # get file name
  chomp;     
  my $file = $_;

  # process file named $file
  open (my $FILE,'<', $file) or die "Can't open: $!";
     my @file = <$FILE>;
  close $FILE;
  print @file;
}
    
por 14.05.2017 / 08:59