用于批处理文件的Perl脚本



我有一个相对简单的问题要问各位专家。我在一个目录中有300个文件,我想用perl脚本处理这些文件(如下所示)。我想知道是否有一种方法可以在perl中的一批文件中使用变量和进程。如果有帮助的话,我有一个包含文件名列表的文件。我们将感谢您的反馈。

========================================

#!/usr/bin/perl
use strict;
use warnings;
open (FILE1, "001.txt") or die ("Can't open file $!");
while(<FILE1>){
        my $line = $_;
        chomp $line;
        if ( $line =~ m/^chr/ ) {
            open OUT, '>>', '001_tmp.txt';
            print OUT "$linen";
            }
}
close(OUT);
close(FILE1);

====================================

澄清:基本上,我想要的perl脚本相当于下面的shell脚本,在那里我可以使用变量容纳所有文件。

#!/bin/bash 
if [[ $# != 1 ]] 
then 
   echo "Usage: error <input>" 
else 
   echo $# $1 
   export input=$1 
   grep "^chr" $1 > ${input}_tmp.vcf  

因此,您希望while循环读取某个给定目录中的每个文件。。

我会这样做:

使用opendirreaddir,这样您就可以获得要操作的文件名。

我也会使用grep来过滤掉你不关心的文件,在我的例子中,我过滤掉了目录。。。

opendir(my $dh, $dir) or die "$dir: $!";
my @files = grep { !-d $_ } readdir $dh;
closedir $dh;

现在你将有一个文件列表要做的工作…

for my $file (@files) {
    open my $fh, "<", $file or die "$!";
    while( my $line = <$fh> ) {
        #TODO: stuff
    }
    close $fh;
}

编辑:您的标记表示批处理文件,即Windows批处理文件。如果你不是这个意思,那就忽略这个。:-)

也许是这样的:

从批处理文件:

for /f %%x in (listoffilenames.txt) do (
    perl myperlscript.pl %%x
)

然后您的Perl脚本可以这样修改:

#!/usr/bin/perl
use strict;
use warnings;
# You may want to add a little more error handling 
# around getting the filename, etc.
my $filename = shift or die "No filename specified.";
open (FILE1, "<", $filename) or die ("Can't open file $!");
while(<FILE1>){
        my $line = $_;
        chomp $line;
        if ( $line =~ m/^chr/ ) {
            open OUT, '>>', "temp-$filename";
            print OUT "$linen";
            }
}
close(OUT);
close(FILE1);