免费注册 查看新帖 |

Chinaunix

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

请教 字符串循环右移 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-11-26 19:22 |只看该作者 |倒序浏览
请教!字符串循环右移

各位大侠!小弟求教!
      因为是学生物,所以编程基础不扎实,小弟编程设计SSR引物,将ATATATATATAT TATATATATA这样的相同两个重复的字符串自动划分为AT和TA两类,但实际上我们是当做一类。因此想将TA换成AT。但是实际上存在 ATTTGGGATTTGGGATTTGGG这上4个序列重复等,这样很长序列的重复。
      这样用编程的说法我觉得是字符串右移,既将ATTTGGG
                                                                        TTTGGGA
                                                                          TTGGGAT
                                                                           TGGGATT
                                                                             GGGATTT
                                                                                GGATTTG
                                                                                  GATTTGG
这样的字符串都换做ATTTGGG,因为重复单元的长度和序列都不相同,有2万多个字符串,手工基本不可能,
                                                                                                                          请教!!!
最终是按照重复单元分类并计数。
原始表格是:
Sequence ID        Repeat Type        Repeat        Start Base        End Base        Length
>TA9635_3708        trinucleotide        GCTGCTGCTGCTGC        486        499        14
>TA9630_3708        tetranucleotide        TTTGTTTGTTTGTT        481        494        14
>TA9618_3708        dinucleotide        GAGAGAGAGAGAGAGAGAGA        31        50        20
的样式,一共2000多行,





其中Repeat项的重复序列挑出来。后来我加上excel弄出来 不过非常复杂。
先将 重复类型都换成数字 2,3,4,5.
按照其重复的类型,重复几次 就几次substr($3,1,$2) substr($3,2,$2) 用awk将几个重复类型都输出来。
如第一行 有GCT CTG TGC三个重复类型
再在excel表格中用替换 将A换成1 将C换成2 将G换成3 将T换成4 然后选最小值。如第一行的324 243 432 就选243    然后再替换回来。

所以这个问题如果没有其他方法 我勉勉强强,基本算是解决了。谢谢各位大虾!




现在又有新的问题了,就是怎么讲字符串的顺序倒置? 比如说 ABCDEF 换成 FEDCBA 。表格形式是:
ATGTT
ATTCC
ATTCG
ATTCT
ATTGT
ATTTC
ATTTG
ATTTT
CCCCT

求教!!!!!

[ 本帖最后由 hulnglei 于 2009-11-29 11:17 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-11-26 19:35 |只看该作者

回复 #1 hulnglei 的帖子

不明白你要是想实现什么目的

论坛徽章:
0
3 [报告]
发表于 2009-11-26 21:50 |只看该作者
就是向右移,就是右边字符放在左边。这样可以变成一样字符串的将其转换为一个字符串

论坛徽章:
0
4 [报告]
发表于 2009-11-26 22:14 |只看该作者
是這樣嗎?
@bio = split //,'ATTTGGGATTTGGGATTTGGG';
while(push @bio,shift @bio){
    print @bio,"\n";
}


[ 本帖最后由 lokchungk 于 2009-11-26 22:15 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2009-11-27 12:21 |只看该作者
  1. my %hash;
  2. while(<DATA>){
  3.     chomp;
  4.     if(exists $hash{$_}){
  5.         print $hash{$_},"\n";
  6.     }else{
  7.         my $val=$_;
  8.         my $str=$_;
  9.         foreach (1..length($_)){
  10.             $hash{$str}=$val;
  11.             $str=~s/^(.)(.*)$/$2$1/g;
  12.         }
  13.         print $val,"\n";
  14.     }
  15. }

  16. __DATA__
  17. ATTTGGGATTTGGGATTTGGG
  18. TTTGGGATTTGGGATTTGGGA
  19. TTGGGATTTGGGATTTGGGAT
  20. GATTTGGGATTTGGGATTTGG
  21. GATTTGGGATTTGGGATTTGA
复制代码

论坛徽章:
0
6 [报告]
发表于 2009-11-27 12:43 |只看该作者
看來是想用sort

论坛徽章:
0
7 [报告]
发表于 2009-11-28 18:57 |只看该作者

谢谢高手们!

多谢4,5楼的大哥们,   但是我觉得是不是只能向右边右移啊?但是我右移的目的是想把通过右移可以变成一样的序列都转换成一个序列。

6楼的兄弟 :也可以这样说,主要是sort在这里我不会实现,所以想求教下perl。如果其他能实现也行。就是excel能实现也行

我有头疼了一天,思考有没有什么简单的方法可以直接在
ATTTGGGATTTGGGATTTGGG
TTTGGGATTTGGGATTTGGGA
TTGGGATTTGGGATTTGGGAT
GATTTGGGATTTGGGATTTGG
GATTTGGGATTTGGGATTTGA

这样的几行,当然最好直接用linux下的命令,每行挑取其重复单元,上面的当然每行都挑出ATTTGGG。虽然重复单元也可以写成其他形式,如 TTTGGGA,但这种ATTTGGG最好看一些。
     此外,因为这是DNA双链,TG对应着对面的就是CG。所以搞生物也会把TG直接当做AC。这个能够一起实现就更好的。例如:GT的重复单元最好能转换成 AC

论坛徽章:
0
8 [报告]
发表于 2009-11-28 19:32 |只看该作者
我有头疼了一天,思考有没有什么简单的方法可以直接在
ATTTGGGATTTGGGATTTGGG
TTTGGGATTTGGGATTTGGGA
TTGGGATTTGGGATTTGGGAT
GATTTGGGATTTGGGATTTGG
GATTTGGGATTTGGGATTTGA

这样的几行,当然最好直接用linux下的命令,每行挑取其重复单元,上面的当然每行都挑出ATTTGGG。虽然重复单元也可以写成其他形式,如 TTTGGGA,但这种ATTTGGG最好看一些。

如果你能事先人为确定有哪些重复的单元就好实现些,比如你确定有限的几种重复单元。也就是要有依据才好匹配。
你右移字符串是因为这个序列是圆的,是为了解决从哪里开始的意思。这个是不停变化的。
如果两个都是不确定的,这个好像就不好实现吧?
编程新手,对生物学也不懂,纯属从感觉上说一下。列位见笑。

论坛徽章:
0
9 [报告]
发表于 2009-11-28 19:52 |只看该作者
你说很有道理,
在这里,因为生物学的DNA只有ACGT四个字母,而且我的工作很简单 只有长度2个到5个的重复单元 所以重复单元有:
AC  AG  AT  CG  CT  GT  AAC  AAG  AAT  ACC  ACG  ACT  AGC  AGG  AGT  ATC  ATG  ATT  CCG  CCT  CGG  CGT  CTG  CTT  GGT  GTT  AAAC  AAAG  AAAT  AACC  AACG  AACT  AAGC  AAGG  AAGT  AATC  AATG  AATT  ACAG  ACAT  ACCC  ACCT  ACTC  ACTT  AGAT  AGCG  AGCT  AGGG  AGTC  AGTG  ATCC  ATCG  ATCT  ATGC  ATGG  ATGT  ATTC  ATTG  ATTT  CCCT  CCGG  CCTT  CGCT  CGTG  CGTT  CTGT  CTTG  CTTT  GGGT  GGTT  GTTT  AAAAC  AAAAG  AAAAT  AAACC  AAACG  AAACT  AAAGC  AAAGG  AAAGT  AAATC  AAATG  AACAC  AACAG  AACCG  AACTC  AACTG  AAGAC  AAGAG  AAGCC  AAGCT  AAGGG  AAGTG  AATAC  AATAT  AATCC  AATCG  AATGG  AATGT  AATTC  AATTG  AATTT  ACCCC  ACCCG  ACCGT  ACCTT  ACGCG  ACGGT  ACTAG  ACTAT  ACTCC  ACTTC  ACTTT  AGAGC  AGAGG  AGAGT  AGATT  AGCGG  AGCTC  AGGCG  AGGCT  AGTCC  AGTCT  AGTGG  AGTTG  AGTTT  ATATC  ATATG  ATATT  ATCCC  ATCGC  ATCGG  ATCTC  ATCTG  ATGCT  ATGTC  ATGTG  ATGTT  ATTCC  ATTCG  ATTCT  ATTGT  ATTTC  ATTTG  ATTTT  CCCCT  CCCGG  CCTCG  CCTCT  CCTTT  CGCTT  CGGGT  CGGTT  CGTCT  CGTGT  CGTTT  CTCTG  CTCTT  CTGGG  CTGGT  CTGTG  CTGTT  CTTGG  CTTGT  CTTTG  CTTTT  GGGTT  GGTGT  GGTTT  GTGTT  GTTTT

上面重复单元中就没有GC,TA等重复单元,因为其和CG,AT是冗余而被去掉。

我的思考是如果在TTTGGGATTTGGGATTTGGGA  这样的序列截取时就直接取ATTTGGG的话。 那么就没有必要将TTTGGGA进行右移了。如果不能直接截取那就得右移!
反正右移不是目的,目的是得到比较上述重复单元形式的重复单元。

论坛徽章:
0
10 [报告]
发表于 2009-11-28 20:21 |只看该作者
这样就好办些了。计算机的优势就是做有必要的重复工作,所以你不必考虑右移会麻烦。
但是你得从五位的开始匹配,然后是四位,依次到两位对不对?例如ATTTGGGATTTGGGATTTGGG这样一个序列,你如果从两位开始匹配,那肯定要匹配AT、ATT等多个,所以要从多位的开始,一旦匹配了ATTTGGG之后,这个序列就被移除保存到ATTTGGG的这个类别。就不再匹配更少位数的了,是这样吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP