免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3378 | 回复: 7
打印 上一主题 下一主题

求助依多条件整理序列 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-12-17 13:35 |只看该作者 |倒序浏览
本帖最后由 tempo8 于 2014-12-17 13:53 编辑

各位战友好!上百条序列,以6种读吗方式翻译(如图的上半部分),要作筛选确定其中的一种方式,并分拣出序列,存储!

筛选标准:
0. >这一行为ID,全行保留;1. 含WRKY字符; 2. *后面的M保留(序列起始);WRKY后面的*保留(终止点)
数据与效果:(只作了其中的一条)
原始数据(上百条序列*6)见图的左半部分,
最终结果如右半部分!

思路:
chomp吗?

~/(>.{36})\*.+(M.+WRKY.+\*)/
取$1即为ID这一行,(TCONS_00007474_1 gene=LOC_Os01g09100长度36)
再取$2即为序列M.+WRKY.+\*
print $1\n$2

论坛徽章:
1
程序设计版块每日发帖之星
日期:2015-10-07 06:20:00
2 [报告]
发表于 2014-12-17 14:43 |只看该作者
1.  每次读一个seq (seq merge到一行)。
2.  每一个seq都split by *, 变成array
3.  这个array的元素 match /M.*?WRKY/ 的话,print.

论坛徽章:
0
3 [报告]
发表于 2014-12-19 13:48 |只看该作者
本帖最后由 tempo8 于 2014-12-19 14:07 编辑
  1. $name=<STDIN>;
  2. chomp($name);

  3. open (IN, "$name")|| die ("Could not open file");
  4. open (OUT,">out1$name.txt")|| die ("Could not open file");
  5. $f=<IN>;
  6. chomp($f);
  7. print OUT $f;
  8. while(<IN>)
  9. {chomp;
  10. my($line) = $_;
  11. if ($line=~/(>.{36}).+\*.+(M.+WRKY.+?\*)/) {#~/(>.{36}).+(M.+WRKY.+?\*)/
  12.        $line=join ("\n",$1,$2);            
  13.   }
  14. print OUT $line,"\n";
  15. }
  16. close (IN);
  17. close (OUT);
复制代码
>TCONS_00010413_1 gene=LOC_Os01g47560RF*RGETYRSIAS*LVIWYGLDGCRSAAKGGKAGKGEKRARQPRFAFMTKSEVDHLEDGYRWRKYGQKAVKNSPYPRSYYRCTTQKCPVKKRVERSYQDPAVVITTYEGKHTHPIPATLRGSTHLLAAHAQAAAAAAAAHQLHHHHGHHGHHGMAPPLPLGSGAAAQFGRSSGIDVLSSFLPRAAAAHHGMTTMGGAAATTTTSHGLNSAISGGGGVSSETTSAVTVAASAQPSSPAALQMQHFMAQDLGLLQDMLLPSFIHGTNQP*RDDHHQSEAELIIRLARQEVIWLSIDHAV*LINISLHLFPPK*SPS

论坛徽章:
0
4 [报告]
发表于 2014-12-19 14:04 |只看该作者
本帖最后由 tempo8 于 2014-12-20 09:08 编辑

请大侠们斧正!还是有些小问题:

图左是上述代码整理的!
图右半部分是Notepad搜索的!
为何他们整理的结果不一样呢?见椭圆部分!

实际上:我是想取星号*后第一个M开始的,即(M.+WRKY.+\*)这一部分!)

依多条件整理序列1.jpg (211.84 KB, 下载次数: 42)

依多条件整理序列1.jpg

论坛徽章:
0
5 [报告]
发表于 2014-12-19 14:30 |只看该作者
本帖最后由 tempo8 于 2014-12-19 16:11 编辑

举一反三又出问题了

实际上最终目的是取星号*后第一个M开始,含[FYW].M.[DE][FYW]这一保守基序,以*终止的序列
可是下面代码中的RegExp貌似有问题

:wink: 序列如下
>TCONS_00008129Os01g15640_2
FDR*VSFLGI*LCKLLMIFHITAKCDVPTQDNKWHFFAARDRKYPNGSRSNRATVAGY
WKSTGKDRAIKMGKQTIGTKKTLVFHEGRPPTGRRTEWIMHEYYIDERECQACPDMKDAY
VLCRITKRNDWIPGNGNELDNSDPHPEPYDAPPSVISTEQLNPAAEPVVGVEAAPVTVAE
PDGVTTSAITANIPSPSDDINLDDWLNELFDPFFDPEQSLASADLSPDEQNVESSNVGAL
APKVEQDYSSPNENVVDDTEYLLPEDVYNILHPGTDDFNMLQNPLDQYPIQYATDVWSGI
QKEELWSPQANAEPSQSNEAADNGIIRRYRSMKTPETSVPQFKGKTQAKMRVGINKMATS
SSESINQTIKFENSGRLVEHQKNQAHDVASTKRSDAGKPSTELSSNRGFLRGIRNAFAGC
SDARWNMILVAGFAIGVAVVALHIGQRLGLSQRDQQHT*PLGLQVTGFLCFLQSGET*TN

依多条件整理序列2.jpg (156.58 KB, 下载次数: 43)

依多条件整理序列2.jpg

论坛徽章:
0
6 [报告]
发表于 2014-12-19 15:43 |只看该作者
本帖最后由 tempo8 于 2014-12-20 09:07 编辑

M[^*]+?W[^*]M[^*][DE][FYW][^*]+?\*在Notepad中查找好了!
可是写进perl又不行了!请战友们帮忙诊断!谢谢
  1. print "请输入文件全名\n";
  2. $name=<STDIN>;
  3. chomp($name);

  4. open (IN, "$name")|| die ("Could not open file");
  5. open (OUT,">out1$name.txt")|| die ("Could not open file");
  6. $f=<IN>;
  7. chomp($f);
  8. print OUT $f;
  9. while(<IN>)
  10. {chomp;
  11. my($line) = $_;
  12. if ($line=~/(>.{26}).+\*.+(M[^*]+?W[^*]M[^*][DE][FYW][^*]+?\*)/){
  13.        $line=join ("\n",$1,$2);            
  14.   }
  15. print OUT $line,"\n";
  16. }
  17. close (IN);
  18. close (OUT);
复制代码

论坛徽章:
1
程序设计版块每日发帖之星
日期:2015-10-07 06:20:00
7 [报告]
发表于 2014-12-22 07:33 |只看该作者
1. 输入数据奇怪,4楼左图gene=LOC.. 在ID行,右侧在序列行开始部分。
2. 没有一行的数据满足> 开始,并含有序列的,所以Perl的代码应该啥都match不上啊?
3. line 5-8, 你把<IN> 的第一行拿出来,chomp了放进 <OUT>, 这是干嘛?
4.  while loop 里,不匹配的line也会打印给OUT,这是你想要的?

论坛徽章:
0
8 [报告]
发表于 2014-12-22 15:31 |只看该作者
本帖最后由 tempo8 于 2014-12-22 15:39 编辑

回复 7# chenhao392 谢谢提醒!

1. 输入数据奇怪,4楼左图gene=LOC.. 在ID行,右侧在序列行开始部分。
答:不好意思!右侧是chomp过的(即line 5-8, 你把<IN> 的第一行拿出来,chomp了放进 <OUT>!
2. 没有一行的数据满足> 开始,并含有序列的,所以Perl的代码应该啥都match不上啊?
答:Perl代码重新整理了!
3. line 5-8, 你把<IN> 的第一行拿出来,chomp了放进 <OUT>, 这是干嘛?
答:目的是删除换行符,再搜模式
4.  while loop 里,不匹配的line也会打印给OUT,这是你想要的?
答: 要的结果是图左上半部分的fasta格式的序列!

附上能用多条件整理序列的代码)请斧正!谢谢
  1. {local $/=">";
  2. while (<DATA>){
  3.         if($_=~m/(.{26}).+?\*.+?(M[^*]+W[^*]M[^*][DE][FYW][^*]+?\*)/s){
  4.        my $f=join ("\n",">".$1,$2);
  5.           print $f,"\n";
  6.         }
  7.                         }
  8. }
  9. __DATA__
  10. >TCONS_00008129Os01g15640_2
  11. FDR*VSFFYFLASFVCMPLGI*LCKLLMIFHITAKCDVPTQDNKWHFFAARDRKYPNGSRSNRATVAGY
  12. WKSTGKDRAIKMGKQTIGTKKTLVFHEGRPPTGRRTEWIMHEYYIDERECQACPDMKDAY
  13. VLCRITKRNDWIPGNGNELDNSDPHPEPYDAPPSVISTEQLNPAAEPVVGVEAAPVTVAE
  14. PDGVTTSAITANIPSPSDDINLDDWLNELFDPFFDPEQSLASADLSPDEQNVESSNVGAL
  15. APKVEQDYSSPNENVVDDTEYLLPEDVYNILHPGTDDFNMLQNPLDQYPIQYATDVWSGI
  16. QKEELWSPQANAEPSQSNEAADNGIIRRYRSMKTPETSVPQFKGKTQAKMRVGINKMATS
  17. SSESINQTIKFENSGRLVEHQKNQAHDVASTKRSDAGKPSTELSSNRGFLRGIRNAFAGC
  18. SDARWNMILVAGFAIGVAVVALHIGQRLGLSQRDQQHT*PLGLQVTGFLCFLQSGET*TN
  19. >TCONS_00008129Os01g15640_3
  20. QILGGFETRVMGIGCDPVEIRVDRSVGWLCEEMVFLK*FGIWGIRIAALPSVLQ*DDKSV
  21. NSRLFFLFPF*LAYNRISPHFSGGLM*NLELLPYSY*SF*NFLPCLL*T*NCQ*LERRKH
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP