1

截至目前,我有 22 个文件和 22 个独立但相同(在任务中)的每个文件的脚本。基本上,这就是我所拥有的:

file_1.txt, file_2.txt,..., file_22.txt

对于每个文件,我都有一个脚本:

script_1.pl, script_2.pl,..., script_22.pl

输出

output_1.txt, output_2.txt,..., output_22.txt

分别。

我现在要做的是编写一个脚本,该脚本将同时运行所有脚本(script_1.pl - script_22.pl),这样我就不必每次更新文件时都单独运行它们. 它们都分开的原因是因为我不知道如何循环文件名,并为每个文件名分配一个新的输出文件。我希望有人能帮我解决这个问题:一个脚本可以一次读取所有文件,为每个文件运行脚本(它是一个相同的脚本),并为每个文件打印一个新的输出文件,如上所列。

编辑:我想我应该包括我现在拥有的东西。我确实有一些可行的方法,但它仍然依赖于我拥有 22 个单独的脚本这一事实。我一直在做的事情如下:

system("perl script_1.pl");

system("perl script_2.pl");

...

system("perl script_22.pl");

我希望能够将所有内容组合成一个紧凑的脚本。任何帮助将不胜感激!提前致谢!

4

4 回答 4

4

您可以从中获取程序参数列表,@ARGV然后在for循环中运行您的代码。

for my $input_file (@ARGV) {
    my $output_file = $input_file.".out";

    process_file($input_file, $output_file);
}

sub process_file {
    my($input_file, $output_file) = @_;

    ...do whatever you like with the input and output file...
}

然后你可以像这样运行你的程序:

myprogram file1 file2 file3

它将读取 file1、file2 和 file3 并生成 file1.out、file2.out 和 file3.out。

这是一些非常基本的编程和一些非常基本的 Perl。您可能应该备份并阅读一些 Perl 入门书籍。我可以推荐Curtis Poe 的Beginning Perl,它刚刚问世。

于 2013-01-08T04:39:34.947 回答
1

假设您可以访问Bash

$ for f in file_*.txt; do script.pl "$f" > "${f/file_/output_}"; done

这将为每个输入文件 (file_n.txt) 创建一个输出文件 (output_n.txt)。如果您使用简单的名称(无空格等),则可以删除双引号

于 2013-01-08T04:44:40.613 回答
0

我已经有一段时间没有锻炼我的 perl 肌肉了。但是试试这个来消除你的问题。

for(my $index= 1,$index<=22,$index++){
   my $inputfile = "file_$index.txt";
   my $outputfile = "output_$index.txt";

   system("perl OneScriptToRuleThemAll.pl $inputfile $outputfile");
}

OneScriptToRuleThemAll.pl`script_1.pl .. script_22.pl 中的 1 个统一脚本的愚蠢版本在哪里)。

需要修改脚本以解析 @Argv 以获取输入文件和输出文件参数,而不是对它们进行硬编码。

于 2013-01-08T04:45:12.443 回答
0
system "script_$_.pl" for (1..22);
于 2013-01-09T02:14:16.393 回答