| 查看: 2014 | 回复: 26 | |||
| 当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖 | |||
[求助]
请帮忙编写一个perl程序处理文本 已有1人参与
|
|||
|
现在我碰到这样一个问题,我有一个文本文件1.txt,内容如下: >序列名字1(序列名字可以任意长度)ATGgcggggccccATAGGGGGGTTCCUTG。。。 >序列名字2ATGgcggggccccAgTAGGGGGGTTCCUTG。。。 >序列名字3CTGgggggggccccccgggggutg。。。。。。 后面还有很多序列 要求从这些序列里面筛选出包含一小段子序列(譬如ccccAg)的序列,以上面的三个序列为例,返回的序列文件应该是 >序列名字2ATGgcggggccccAgTAGGGGGGTTCCUTG。。。。。。 后面还有很多序列。 由于序列1,3不包含这个短序列所以被删除了。 请问怎样编写一个perl程序处理上面的问题啊?谢谢了 |
» 猜你喜欢
表哥与省会女结婚,父母去帮带孩子被省会女气回家生重病了
已经有12人回复
依托企业入选了国家启明计划青年人才。有无高校可以引进的。
已经有14人回复
江汉大学解明教授课题组招博士研究生/博士后
已经有3人回复
AI 太可怕了,写基金时,提出想法,直接生成的文字比自己想得深远,还有科学性
已经有11人回复
依托企业入选了国家启明计划青年人才。有无高校可以引进的。
已经有11人回复
jackie1179
木虫 (正式写手)
- 应助: 11 (小学生)
- 金币: 1929.2
- 红花: 1
- 帖子: 460
- 在线: 47.2小时
- 虫号: 1119284
- 注册: 2010-10-11
- 专业: 生物信息学
|
这个程序它是先将分布在多行的每条序列合并为一条完整的序列后再进行正则匹配的,所以一般不会出现匹配不到的情况,下面程序中将不含短序列的序列放到文件out2.txt中,其余不变 #!/usr/bin/perl use strict; use warnings; my @name; my @seqs; if($ARGV[0] eq '-h' || $ARGV[0] eq '--help') { print "Usage: perl ./$0 input_file substring\n"; exit(0); } if(@ARGV < 2) { print "Arguments not enough!\n"; exit(0); } my $cnt=0; my $subseq=$ARGV[1]; open IN,"<$ARGV[0]"; open OUTFILE, ">outfile.txt"; open OUTFILE2,">out2.txt"; while( if (/^>/) { ++$cnt; $name[$cnt]=$_; } if(/^[ATCGatcg]/) { chomp; $seqs[$cnt] .= $_; } } close IN; my $i; my $length; my $hits=0; foreach (1..$cnt) { if($seqs[$_]=~/$subseq/) { ++$hits; print OUTFILE "$name[$_]"; $length=length $seqs[$_]; for($i=1;$i<=$length;$i++) { printf OUTFILE "%s",substr($seqs[$_],$i-1,1); if($i%50 == 0) { print OUTFILE "\n"; } } print OUTFILE "\n"; } else { print OUTFILE2 "$name[$_]"; $length=length $seqs[$_]; for($i=1;$i<=$length;$i++) { printf OUTFILE2 "%s",substr($seqs[$_],$i-1,1); if($i%50 == 0) { print OUTFILE2 "\n"; } } print OUTFILE2 "\n"; } } print "A total of $hits sequences matched.\n"; close OUTFILE; close OUTFILE2; |
22楼2012-05-16 09:14:03
cmdblock
银虫 (正式写手)
- 应助: 23 (小学生)
- 金币: 234.2
- 散金: 79
- 帖子: 719
- 在线: 123.7小时
- 虫号: 1520796
- 注册: 2011-12-02
- 性别: GG
- 专业: 计算机网络
2楼2012-05-04 18:49:29
3楼2012-05-04 19:46:40
【答案】应助回帖
★
感谢参与,应助指数 +1
xzhdty: 金币+1, 谢谢参与 2012-05-04 23:28:41
感谢参与,应助指数 +1
xzhdty: 金币+1, 谢谢参与 2012-05-04 23:28:41
|
我只懂一点点,希望能帮到你。 把程序另存为find.pl 运行时输入: perl find.pl 1.txt 程序部分: #!/usr/bin/perl use strict; use warnings; my $subseq="ccccAg"; my $seq; my $title; open OUTFILE, ">>outfile.txt"; while(<> {if (/>(\w+) (\w+)/) { $title=$1; $seq=$2; if ($seq=~/$subseq/) { print ">$title\n"; print OUTFILE ">$title\n"; print OUTFILE "$seq\n"; } } } close OUTFILE; |

4楼2012-05-04 20:16:24













回复此楼
{