- 论坛徽章:
- 0
|
本帖最后由 lijie_perl 于 2011-12-25 21:36 编辑
一、今天圣诞节,过几天新的一年也将来到了,祝所有常逛CU的朋友们节日快乐,同时祝CU越办越好,越来越强大。注册CU论坛2个月以来,在这里学了不少东西,受到很多人的帮助~~非常感谢你们~
尤其是iamlimeng, yinyuemi,zhlong8 ,xfoucs ,afukada,dgtnk ,askzhigang ,x9x9(BinColder),beginninger ,PfanAya ,justlooks ,jason680,........等等perl前辈和高手。
二、一个问题问大家,圣诞节叨扰,不好意思~~~
有一文件(som_file.txt)- H2AK5ac H2BK120ac H3K14ac H3K18ac H3K36ac H3K4ac H4K5ac H4K8ac 8
- H2BK5ac H3K18ac H3K36ac H3K4ac H4K5ac 5
- H3K14ac H3K36ac H3K4ac H4K5ac H4K8ac 5
- H2BK5ac H3K14ac H3K36ac H4K16ac H4K8ac H3K79me3 5
- H3K14ac H3K36ac H4K8ac H4K91ac H2BK5me1 4
- ..........(全部见附件)
复制代码 一共5515行,每一行代表一种分类。比如第3行代表H3K14ac,H3K36ac,H3K4ac,H4K5ac和H4K8ac 聚为一类,最后一列的数字代表这种分类出现的次数。
上面的结果是计算机统计相关生物信息数据得出的。
现在我想根据生物实验得出的某一模式去文件som_file.txt中查找该模式是否出现了,如果出现,不管出现几次,就输出"1";若没有,输出“0”.
例如若实验模式是:H4K5ac,H3K36ac,H3K14ac ,则在上面文件中查找, 发现出现了2次(第一行和第三行),这样我结果就输出"1"(证明该模式在文件som_file.txt出现了)。- #!/bin/perl -w
- use strict;
- open (INFILE, "som_file.txt");
- while( <INFILE> ){
- if (m#H4K5ac# && m#H3K36ac# && m#H3K14ac# ){
- print "1"."\n";
- last; #只要找到匹配就输出1并退出此次循环
- }
- }
- close(INFILE);
复制代码 上述代码一个一个的查找是没有问题的。但是,
现在我有生物实验数据(table.txt)- H3K14ac,H3K18ac,H3K23ac,H3K27ac,H3K36me1,H3K9me3
- H3K14ac,H3K18ac,H3K23ac,H3K27ac,H3K36me2,H3K4me1,H3K9ac
- H3K14ac,H3K18ac,H3K23ac,H3K27ac,H3K36me2,H3K4me2,H3K9ac
- H3K14ac,H3K18ac,H3K23ac,H3K27ac,H3K36me2,H3K4me3,H3K9me2
- ..........
复制代码 一共有365行,代表有365个试验证明的模式。(该文件被我稍改变了一下形式存为文件find.txt,目的是为了模式查找)
现在我希望对每一个实验模式,都去遍历文件som_file.txt,看该实验模式是否在文件som_file.txt中出现了。如果出现,不管出现几次,输出"1";若没有,输出“0”.- #!/bin/perl -w
- use strict;
- my @arry;
- my $n=0;
- open (INFILE, "som_file.txt");
- while( <INFILE> ){
- push @arry ,$_;
- }
- close(INFILE);
- open (IN,"find.txt");
- open (OUT,">result_find.txt");
- while(my $tep= <IN> ){
- foreach my $arry (@arry){
- if ($tep){ #我认为就是if语句有问题,但是不知道怎样将匹配模式传给程序。
- #只要找到匹配就输出1并退出此次循环,进入下一模式查找。
- print OUT "1"."\n";
- $n++; #统计共匹配了多少次。
- last;
- }else{
- print OUT "0"."\n";
- last;
- }
- }
- }
- print $n;
- close(IN);
- close(OUT);
复制代码 程序输出365个"1",这是不可能的,因为有些实验模式在文件som_file.txt是没有匹配的,最后结果应该为365个既有"0"又有"1"的输出。
我上CU查找了一下相关遍历查找的帖子,但是自己水平有限,一直没有得到想要的结果,请大家帮我改改~~~~~
呵呵,谢谢~
----------------------圣诞快乐!----------------------------
|
|