1

Я новичок в этом сообществе, я пытался найти соответствующие ответы, но не смог найти ни одного.

У меня вопрос, я хочу использовать Perl-скрипт в каталоге файлов, заканчивающихся на .fasta, если я делаю в Bash как

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

Вопрос: как я могу использовать значение переменной $ bash в скрипте PERL. Perl-скрипт открывает каждый файл, выполняет определенные функции для каждого файла и закрывает его. лайк

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

Это примерные функции.

2 ответа2

2

Вы можете получить доступ к параметрам, указанным в скрипте Perl, с помощью массива @ARGV, так что вы можете сделать это:

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

И запустить его с:

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

Вы также можете найти каталоги .fasta с функцией Perl, а затем просмотреть эти результаты.

0

Ответ от mtak является самым простым. Его можно легко изменить, чтобы передать более одного имени файла, но существует системный предел количества аргументов командной строки.

Если вы предпочитаете ответ настроенную на выполнение для огромного количества файлов , то вы можете кормить список файлов через трубу между Баш (родительский процесс) и Perl (дочерний процесс).
Это позволяет избежать многократного запуска интерпретатора Perl и ограничения количества аргументов командной строки.

скрипт bash:

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

скрипт на 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;
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .