2013-08-05 160 views
1

我有一個製表符分隔的文本文件,我在其中使用while循環根據某些列值進行了一些篩選。我將輸出寫入一個新文件。現在我想用這個輸出文件作爲另一個while循環的輸入。這是迄今爲止的代碼。有些東西一定是錯的,因爲out2.txt文件是空的。使用輸出變量作爲perl中的新輸入變量

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是空的。有人可以幫我解決這個問題嗎?

回答

4

在您的腳本中,文件句柄$filter1的「光標」始終設置在文件末尾,而它看起來像要從文件的開頭讀取。您可以使用內置函數seek來重置光標。

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