新手,大家帮我看一下吧
时间:2010-08-07
来源:互联网
本帖最后由 shilin320 于 2010-08-07 21:23 编辑
BJ_080907446G_2169_lj.seq.Contig1 132 GCTCAAC
BJ_080907446G_2169_lj.seq.Contig1 1526 ATTTAAC
BJ_080907446G_2169_lj.seq.Contig1_reverse 740 GTTAGGT
BJ_080907446G_2169_lj.seq.Contig1_reverse 927 GTTAAGT
BJ_080407712G_82_lj.seq.Contig1 134 GCTCAAC
BJ_080407712G_82_lj.seq.Contig1 928 GCCTAAC
BJ_080407712G_82_lj.seq.Contig1 1528 ATTTAAC
BJ_080407712G_82_lj.seq.Contig1_reverse 742 GTTAGGT
BJ_080407712G_82_lj.seq.Contig1_reverse 929 GTTAAGT
BJ_080407712G_82_lj.seq.Contig1_reverse 1554 GTTGGAT
数据如上。说明如下:
一行中,空格之前的算是id(如BJ_080907446G_2169_lj.seq.Contig1),之后是长度(如132),最后是端序列(如GCTCAAC)。
我想达到的目的是:id一样的前提下,reverse对应的编号(如740)减去非reverse对应的编号(如132)。
这样就会得到同id的一组数字的差值(如第一个id:740-132,740-1526,927-132,927-1526等等)。
这个差值(绝对值)要在45到128之间。
补充:找出这些(对儿)。
谢谢大家帮我看看,要怎么写。
BJ_080907446G_2169_lj.seq.Contig1 132 GCTCAAC
BJ_080907446G_2169_lj.seq.Contig1 1526 ATTTAAC
BJ_080907446G_2169_lj.seq.Contig1_reverse 740 GTTAGGT
BJ_080907446G_2169_lj.seq.Contig1_reverse 927 GTTAAGT
BJ_080407712G_82_lj.seq.Contig1 134 GCTCAAC
BJ_080407712G_82_lj.seq.Contig1 928 GCCTAAC
BJ_080407712G_82_lj.seq.Contig1 1528 ATTTAAC
BJ_080407712G_82_lj.seq.Contig1_reverse 742 GTTAGGT
BJ_080407712G_82_lj.seq.Contig1_reverse 929 GTTAAGT
BJ_080407712G_82_lj.seq.Contig1_reverse 1554 GTTGGAT
数据如上。说明如下:
一行中,空格之前的算是id(如BJ_080907446G_2169_lj.seq.Contig1),之后是长度(如132),最后是端序列(如GCTCAAC)。
我想达到的目的是:id一样的前提下,reverse对应的编号(如740)减去非reverse对应的编号(如132)。
这样就会得到同id的一组数字的差值(如第一个id:740-132,740-1526,927-132,927-1526等等)。
这个差值(绝对值)要在45到128之间。
补充:找出这些(对儿)。
谢谢大家帮我看看,要怎么写。
作者: shilin320 发布时间: 2010-08-07
- open IN,"$ARGV[0]";
- while(<IN>)
- {
- chomp;
- if(/(\S+)\s+(\S+)\s+(\S+)/)
- {
- $id=$1;
- $pos=$2;
- $site=$3;
- while(<IN>)
- {
- chomp;
- if(/(\S+)\s+(\S+)\s+(\S+)/)
- {
- $id1=$1;
- $pos1=$2;
- $site1=$3;
- if($id1=~/$id\S+/)
- {
- $val=$pos1-$pos;
- print"$val\n";
- }
- else
- {
- last;
- }
- }
- }
- }
- }
- close IN;
作者: shilin320 发布时间: 2010-08-07
- #!/usr/bin/perl
-
- use strict;
- use warnings;
-
- my %bio;
- while (<DATA>) {
- chomp;
- my ($id,$len,$serial) = split(/\s+/,$_);
- if ($id =~ /(.*)_reverse/i) {
- $bio{$1}{reverse}{$len} = $_;
- }
- else { $bio{$id}{original}{$len} = $_; }
- }
- foreach my $id (keys %bio) {
- foreach my $len_o (keys %{$bio{$id}{original}}) {
- foreach my $len_r (keys %{$bio{$id}{reverse}}) {
- if (abs($len_o-$len_r) >= 45 and abs($len_o-$len_r) <= 128) {
- print "$bio{$id}{original}{$len_o}\n$bio{$id}{reverse}{$len_r}\n\n";
- }
- }
- }
- }
-
- <STDIN>;
-
- __DATA__
- BJ_080907446G_2169_lj.seq.Contig1 132 GCTCAAC
- BJ_080907446G_2169_lj.seq.Contig1 1526 ATTTAAC
- BJ_080907446G_2169_lj.seq.Contig1_reverse 240 GTTAGGT
- BJ_080907446G_2169_lj.seq.Contig1_reverse 1427 GTTAAGT
- BJ_080407712G_82_lj.seq.Contig1 134 GCTCAAC
- BJ_080407712G_82_lj.seq.Contig1 928 GCCTAAC
- BJ_080407712G_82_lj.seq.Contig1 1528 ATTTAAC
- BJ_080407712G_82_lj.seq.Contig1_reverse 742 GTTAGGT
- BJ_080407712G_82_lj.seq.Contig1_reverse 829 GTTAAGT
- BJ_080407712G_82_lj.seq.Contig1_reverse 1554 GTTGGAT
你看这样行不行。不过如果你的数据量很大,就要考虑内存的容量,上述程序会将数据全部读入内存。
作者: iamlimeng 发布时间: 2010-08-07
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28