Michael Oldham am Freitag, 23. Juni 2006 18:20:
> Hello again,
Hi Michael again,
> Thanks to everyone for their helpful suggestions. I finally got it to
> work, using the following script. However, it takes about 5 hours to
> run on a fast computer. Using grep (in bash), on the other hand, takes
> about 5 minutes (see below if you are interested). Thanks again!
>
> SLOW perl script:
>
> #!/usr/bin/perl -w
>
> use strict;
>
> my $IDs = 'ID_all_X';
>
> unless (open(IDFILE, $IDs)) {
> print "Could not open file $IDs!\n";
> }
>
> my $probes = 'HG_U95Av2_probe_fasta';
>
> unless (open(PROBES, $probes)) {
> print "Could not open file $probes!\n";
> }
>
> open (OUT,'>','probe_subset.txt') or die "Can't write output: $!";
>
> my @ID = <IDFILE>;
> print @ID;
> chomp @ID;
>
> while (my $line = <PROBES>) {
> foreach my $identifier (@ID) {
> if($line=~/^>probe:\w+:$identifier:/) {
> print OUT $line;
> print OUT scalar(<PROBES>);
> }
> }
> }
> exit;
[...]
here's a skeleton how I would do it. It should run quite fast.
The creation of the lookup hash from file is left off as well
as the usage of a real input/output data files.
Hope this helps,
Dani
#!/usr/bin/perl
use strict;
use warnings;
# just a dummy, must be built from file.
#
my %lookup=map {$_=>1} ('1138_at','1102_s_at');
# This is the only regex we have to use.
# Maybe split is faster, didn't test it.
#
my $re=qr/^.*?:.*?:(.*?):/;
# extract the target string for the selection test,
# test, and print if test ok
#
while (<DATA>) {
print $_ if ~/$re/ and exists $lookup{$1};
}
__DATA__
>probe:HG_U95Av2:1138_at:395:301;
Interrogation_Position=2631;Antisense;TGGCTCCTGCTGAGGTCCCCTTTCC
>probe:HG_U95Av2:107_at:543:519; Interrogation_Position=258;
Antisense;CTACTCTCGTGGTGCACAAGGAGTG
>probe:HG_U95Av2:1156_at:528:483;
Interrogation_Position=2054;Antisense;TGCAGGTGGCAGATCTGCAGTCCAT
>probe:HG_U95Av2:1102_s_at:541:589;
Interrogation_Position=4316;Antisense;GTGAAGGTTGCTGAGGCTCTGACCC
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>