2013-01-08 82 views
1

截至目前,我有22个文件和22个独立的文件,但每个文件都有相同的(在任务中)脚本。非常基本上,这是我有:(Perl)为多个文件运行相同的代码

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");

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

+0

如果相同的脚本为什么不统一通过输入和输出文件名作为[arguements](http://www.cyberciti.biz/faq/howto-pass-perl-command-line-arguments/)?而不是'script_1.pl',它应该是'./script.pl file_1.txt output_1.txt' –

回答

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 

而且它会读取文件1,文件2和文件3,生产file1.out file2.out和file3.out。

这是一些非常基本的编程和一些非常基本的Perl。您应该备份并阅读一些开始的Perl书籍。我可以推荐刚刚出来的Curtis Poe's Beginning Perl

+0

也许应该指定'process_file'应该包含主脚本的代码,而不是'system(“脚本.pl $ input $ output“)'。 – TLP

+0

谢谢!是的,我刚刚开始因为一个研究项目而开始使用Perl,所以我仍然有很多基本的东西需要我去理解。我一定会看看那本书! – Peter

1

假设你有Bash访问:

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

这将为每个输入文件(file_n.txt)输出文件(output_n.txt)。如果你使用简单的名字(没有空格等),你可以删除双引号。

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是我的1个统一脚本的愚蠢版本从`script_1.pl .. script_22.pl)。

该脚本需要修改以解析@Argv来获取inputfile和outputfile参数,而不是对它们进行硬编码。

0
system "script_$_.pl" for (1..22); 
相关问题