in reply to Re: Print entire line
in thread Print entire line

Ok, there is a tab between post-trau/DOID/APOE/FKBP5, they are on the same line

post-traumatic stress disorder DOID:2055 APOE FKBP5 CRH IL2 SLC6A3 MAOB DBH IL8

My input is "DOID:2055" and my output should be:





and the other genes. Sorry for my explanation now is clear? Thanks Paola

Replies are listed 'Best First'.
Re^3: Print entire line
by Loops (Curate) on Nov 06, 2014 at 11:44 UTC


    my $filename = '/Users/Pabli/Desktop/do_human_mapping.gmt'; my $match = 'DOID:2055'; open(my $file, '<', $filename) or die "open: $!"; while (<$file>){ my ($name,$id,@genes) = split /\t/; print join("\n",@genes) if $id eq $match; }

    The answer to your question then, is to use the assignment idiom above, to name the first two fields, and then use an array to slurp up all the genes that follow on the line. Because the name and id never get lumped into the @genes array, you don't have to go through contortions when it comes time to print.

      Thanks so so so much!!! It works!!!!!!


      Sorry and if i want for example to search all the genes associated to different "DOID". My file is:

      parasitic helminthiasis infectious disease DOID:883 IL4 IL5

      female reproductive organ cancer DOID:120 BARD1 MAN1B1 SLC12A7 AMHR2 IL4 SLC12A6 SLC12A4

      My input is "IL4" and i want:



      I have to compare string? Thank a lot Paola

        It's essentially the same program, with a different comparison:

        my $filename = '/Users/Pabli/Desktop/do_human_mapping.gmt'; my $match = 'IL4'; open(my $file, '<', $filename) or die "open: $!"; while (<$file>){ my ($name,$id,@genes) = split /\t/; print $id,$/ if grep/^$match$/, @genes; }

        Happy to help, but the hope is that you're working towards being able to construct these lil programs for yourself!