-2

我有一个相对简单的问题请教各位专家。我想用我的 perl 脚本处理的目录中有 300 个文件(如下所示)。我想知道是否有办法在 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 "$line\n";
            }
}
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  
4

2 回答 2

0

编辑:您的标签表示批处理文件,即 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 "$line\n";
            }
}
close(OUT);
close(FILE1);
于 2013-07-29T20:07:56.840 回答
0

因此,您希望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;
}
于 2013-07-29T20:36:41.753 回答