我有一个相对简单的问题给你的专家。我在目录中有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 "$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
答案 0 :(得分: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);
答案 1 :(得分:0)
所以你希望你的while
循环读取某个给定目录中的每个文件..
我会做这样的事情:
使用opendir
和readdir
,以便您可以获取要操作的文件名。
我还会看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;
}