in reply to Re^4: General program and related problems
in thread General program and related problems
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;
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^6: General program and related problems
by micky744monk (Novice) on Aug 06, 2009 at 06:31 UTC | |
by jethro (Monsignor) on Aug 06, 2009 at 08:16 UTC | |
by micky744monk (Novice) on Aug 06, 2009 at 08:45 UTC | |
by jethro (Monsignor) on Aug 06, 2009 at 10:40 UTC | |
by micky744monk (Novice) on Aug 06, 2009 at 11:44 UTC | |
by micky744monk (Novice) on Aug 06, 2009 at 12:15 UTC |