使用输出变量作为perl中的新输入变量

时间:2013-08-05 15:14:58

标签: perl

我有一个制表符分隔的文本文件,我在其中使用while循环基于某些列值进行一些过滤。我将输出写入一个新文件。现在我想将此输出文件用作另一个while循环的输入。这是我到目前为止的代码。有些东西一定是错的,因为out2.txt文件是空的。

my $table1 = $ARGV[0];
open( my $file, $table1 ) || die "$! $table1"; #inputfile
open( my $filter1, '+>', "out.txt" )  || die "Can't write new file: $!"; #first output
open( my $filter2, '+>', "out2.txt" ) || die "Can't write new file: $!"; #second output

while (<$file>) {
    my @line = split /\t/; #split on tabs
    if ( $line[12] =~ /one/ ) { 
        print $filter1 "$_";
    }   
}

while (<$filter1>) {
    my @line = split /\t/; #split on tabs
    if ( $line[11] =~ /two/ ) { 
        print $filter2 "$_";
    }   
}

输出文件out.txt包含正确的信息。但是out2.txt为空。有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:4)

在您的脚本中,文件句柄$filter1的“光标”始终设置在文件的末尾,而看起来您想要从文件的开头读取。您可以使用seek内置函数重置光标。

seek $filter1, 0, 0;  # reset $filter1 to start of file
while (<$filter1>) {
    ...
}