SHOW:
|
|
- or go back to the newest paste.
| 1 | # Create an index of every 10000th line to the byte offset. | |
| 2 | tie %$idx,'MLDBM', $foo.".lidx", O_CREAT|O_RDWR, 0666 or die "$! $foo.lidx"; | |
| 3 | my $sam = Bio::DB::Sam->new(-bam => $foo); | |
| 4 | my $bam = $sam->bam; | |
| 5 | my $iterator = $sam->features(-iterator=>1); | |
| 6 | ||
| 7 | my $cnt = 0; | |
| 8 | while(my $seq = $iterator->next_seq()) {
| |
| 9 | if( $cnt % 10000 == 0 ) {
| |
| 10 | print STDERR "$cnt:". $bam->tell."n"; | |
| 11 | $idx->{$cnt} = $bam->tell;
| |
| 12 | } | |
| 13 | $cnt++; | |
| 14 | } | |
| 15 | ||
| 16 | ||
| 17 | ### ...later on | |
| 18 | # Open the bam file again | |
| 19 | my $sam = Bio::DB::Sam->new(-bam => $foo); | |
| 20 | ||
| 21 | my $bam = $sam->bam; | |
| 22 | print $bam->tell."\n"; | |
| 23 | - | $bam->seek($idx->{$pos,0);
|
| 23 | + | $bam->seek($idx->{$pos},0);
|
| 24 | ||
| 25 | #Should have seeked to the new pos. | |
| 26 | - | print STDERR $bam->tell ." $idx->{$ARGV[1]}n";
|
| 26 | + | print STDERR $bam->tell ." $idx->{$pos}n";
|
| 27 | ||
| 28 | # Print out the 1000th line in the 'sam' file. | |
| 29 | my $iterator = $sam->features(-iterator=>1); | |
| 30 | my $seq = $iterator->next_seq(); | |
| 31 | print $seq->qname."n"; |