The push array is a problem. Insert print "<@output>\n" after the second while loop and you will see that @output is emtpy or nearly empty. Because it has only the result of the last line in it.
I see you changed something in the first loop. Putting the whole line into %rs with $rs{$line}= $position; is wrong. You have to store the rsxxx as key otherwise you won't find anything.
Here is the code that is working, at least with my test data. Note that this is exactly your version from two days ago with 'Close' changed to 'close' and the line with the grep changed to use push and without the 'my'. If that isn't working for you it means I'm operating on different data than you
#!/usr/bin/perl -w use strict; my$line; my@fields; my@output; open (FILE1, 'snp.txt') or die "can't open the file: $!"; open (FILE2,'chr22.txt') or die "can't open the file: $!"; open (FD, '>test.txt') or die "can't open the file: $!"; my $position = tell(FILE2); my %rs; while ($line=<FILE2>) { my ($key)= $line=~/^(rs\d{5,})\b/; if (defined $key) { $rs{$key}= $position; } $position=tell(FILE2); } while (defined ($line= <FILE1>)) { my@fields= split (/\s+/ ,$line); push @output, grep /^rs\d{5,}\b/ ,@fields; } foreach (@output) { if (exists $rs{$_}) { seek(FILE2,$rs{$_},0); my $line= <FILE2>; print FD $line; } } close FILE1; close FILE2; close FD;
In reply to Re^5: General program and related problems
by jethro
in thread General program and related problems
by micky744monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |