Hi, Jim Thanks very much!
It works now! All the best Li ________________________________________ From: Jim Gibson [jimsgib...@gmail.com] Sent: Sunday, August 26, 2012 12:13 PM To: Perl Beginners Subject: Re: a condition On Aug 26, 2012, at 10:03 AM, Wang, Li wrote: > Dear All > > Thanks very much for your help! > I tried the script with my real data and found out that the situation gets > more complicate. > The following is part of my data: > scaffold_1_13528 T/T C/T T/T C/T T/T C/T T/T > T/T N/N T/T C/T T/T C/C C/T C/T T/T T/T > T/T T/T T/T T/T C/T C/T C/T C/T T/T T/T > T/T N/N T/T (keep) > scaffold_1_13531 G/G G/G G/G G/G G/G G/C G/G > G/G N/N G/G G/C G/G G/G G/G G/G G/G G/G > G/G G/G G/G G/G G/G G/G G/G G/G G/G G/G > G/G N/N G/G (keep) > scaffold_1_13546 A/A A/A A/A A/A A/A C/A A/A > A/A N/N A/A C/A N/N A/A A/A N/N N/N A/A > N/N A/A N/N A/A A/A A/A C/A C/A A/A A/A > N/N N/N A/A (keep) > scaffold_1_22222 N/N C/C N/N C/C N/N N/N C/C > C/C N/N N/N C/C C/C N/N C/C C/C C/C N/N > N/N C/C N/N C/C N/N C/C N/N C/C C/C C/C > N/N N/N C/C (delete) > scaffold_1_113139 C/C C/C N/N C/C N/N C/C C/C > C/G N/N C/C N/N C/C N/N C/C C/C N/N N/N > C/C N/N C/G C/G N/N C/C C/C N/N C/C C/C > N/N C/C C/C (keep) > scaffold_1_113140 G/G G/G N/N G/G N/N G/G G/G > G/G N/N G/G G/G G/G N/N G/G G/G N/N N/N > G/G N/N G/G G/G N/N G/G G/G N/N G/G G/A > N/N G/A G/G (keep) > scaffold_1_113207 A/A A/A N/N A/A N/N A/A A/A > A/A N/N A/A A/A A/A N/N A/A A/A N/N N/N > A/A N/N A/A A/A N/N A/A A/A N/N A/A A/A > N/N A/A A/A (delete) > scaffold_1_114021 C/C C/C N/N C/C N/N C/C C/C > C/T C/C C/C C/C N/N N/N C/C C/C C/T N/N > C/C N/N C/T C/C N/N C/C C/C C/C C/C C/C > N/N C/C C/C (keep) > scaffold_1_114213 A/C C/C A/A C/C N/N A/C A/A > A/A A/A A/C A/C A/C N/N A/A A/A A/A N/N > A/A A/A A/A A/A N/N A/A C/C A/A A/A A/A > N/N A/A A/A (keep) > > If in each line, without count of "N/N", all the other SNPs are the same, > delete this line. The "scaffold" indicates the position of the SNP. > > My code is as follows: > #! /usr/bin/perl > use strict; > use warnings; > > my $usage="perl $0 <infile>\n"; > > my $in=shift or die $usage; > open (IN,$in) or die "Error: not found the $in\n"; > > my $outfile = "SNPFilterSeg.txt"; > open (OUT, ">$outfile"); > > my $i; > > > while (<IN>){ > next if /^#/; > $_=~s/\n//; > $_=~s/\r//; > my @tmp=split("\t",$_); > my @arr; > for ($i=1; $i<=30; $i++){ > next if $tmp[$i] =~ m/N\/N/; #filter out all "N/N" next if $tmp[$i] eq 'N/N'; is probably an easier test here. > @arr = split("\t",$tmp[$i]); #assign the filtered data to a new array > @arr At this point, since you split the original line on "\t", there aren't going to be any tab characters in the elements of @tmp. You are going to have a one-element @arr array here. I think you want the following instead of the above line: push(@arr,$tmp[$i]); This will accumulate all of the tokens in the line, other than the first, that are not equal to 'N/N'; > } > if (@arr == grep $arr[0] eq $_, @arr) { Your one-element array will always pass this test. > print OUT "here\n"; > } > else{ > print OUT "@tmp\n"; > } > } > > close IN; > close OUT; > > It returns me all "here". > I struggled but failed at figuring out what is the problem. Could you please > point out the problem? -- To unsubscribe, e-mail: beginners-unsubscr...@perl.org For additional commands, e-mail: beginners-h...@perl.org http://learn.perl.org/ -- To unsubscribe, e-mail: beginners-unsubscr...@perl.org For additional commands, e-mail: beginners-h...@perl.org http://learn.perl.org/