On Fri, Sep 30, 2011 at 09:37, Nathalie Conte <[email protected]> wrote:
> thanks for any clues
It's a simple one, really.. 8^)
> #!/software/bin/perl
> use warnings;
> use strict;
> open(IN, "<example.txt") or die( $! );
> open(OUT, ">>removed.txt") or die( $! );
ObCorrectness: you should say something more like
open( my $IN , '<' , 'example.txt' ) or die( $! );
open( my $OUT , '>>' , removed.txt' ) or die( $! );
and then change the filehandles correspondingly -- but that's not your problem.
> my @bad_chromosome=(6,8,14,16,18,Y);
> while(<IN>){
> chomp;
> my @column=split /\t/;
> foreach my $chr_no(@bad_chromosome){
> if ($column[0]==$chr_no){
> next;
here's your problem -- next always applies to the innermost loop -- so
you're jumping to the next $chr_no, not the next $_.
you solve this with a loop label:
LINE: while( <IN> ) {
chomp;
my @column = split /\t/;
foreach my $chr_no ( @bad_chromosome ) {
if( $column[0] == $chr_no ) {
next LINE;
and then the rest is all the same.
You _may_ want to switch that comparison to 'eq' instead of '==' --
didn't you have 'Y' as one of the chromosomes to drop?
> print OUT
> $column[0],"\t",$column[1],"\t",$column[2],"/",$column[3],"\t",$column[4],"\t",$column[5],"\t",$column[6],"\t",$column[7],"\t",$column[8],"\t",$column[9],"\t",$column[10],"\t",$column[11],"\t",$column[12],"\t",$column[13],"\t",$column[14],"\n";
Oh, and this? Try something like
print (join '\t' , @column), "\n"
chrs,
john.
--
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
http://learn.perl.org/