(Perl)为多个文件运行相同的代码

时间:2013-01-08 04:32:24

标签: perl multiple-files

截至目前,我有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 个答案:

答案 0 :(得分: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's Beginning Perl

答案 1 :(得分:1)

假设您有权访问Bash

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

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

答案 2 :(得分:0)

自从我弯曲肌肉以来已经有一段时间了......但试着这样做可以消除你的问题。

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以获取inputfile和outputfile参数,而不是对其进行硬编码。

答案 3 :(得分:0)

system "script_$_.pl" for (1..22);