如何在unix / linux命令中搜索关键字并计算大小片段? 限制酶消化

问题描述

例如,我有一个.fa这样的fasta文件,执行hindiII的限制性酶切

ataaaatactggcaaacagaatccagcagcacatcaaaaagcttatccac
AGTAATTCATTATATCAAAATGCTCCAggccaggcgtggtggcttatgcc
tgtaatcccagcactttgggaggtcgaagtgggcggatcacttgaggtca
aatgtagtaagattatctcagattttaaccgctgtattaaaaaagcttaa
tataatccatgaaaattggaggccaaactaagcttagatacaaacatcta
ggagttggagactagcctggccaacatgatgaaaccccgtctctaataat
aggaaaaggagaggaatgaggttggaaaatagtacacaggaagcttcaac

我正在找到包含大写字母和小写字母的序列aagctt,然后将字符串分隔为aagctt

将每个碎片作为独立的单元进行处理,并计算其长度

fragment 1 from 1 to 39: length 39
ataaaatactggcaaacagaatccagcagcacatcaaaa

fragment 2 from 40 to 193: length 154
                                       agcttatccac
AGTAATTCATTATATCAAAATGCTCCAggccaggcgtggtggcttatgcc
tgtaatcccagcactttgggaggtcgaagtgggcggatcacttgaggtca
aatgtagtaagattatctcagattttaaccgctgtattaaaaa

fragment 3 from 194 to 230: length 37
                                           agcttaa
tataatccatgaaaattggaggccaaacta

fragment 4 from 231 to 341: length 111
                              agcttagatacaaacatcta
ggagttggagactagcctggccaacatgatgaaaccccgtctctaataat
aggaaaaggagaggaatgaggttggaaaatagtacacagga

fragment 5 from 342 to 350: length 9
                                         agcttcaac

我不一定需要unix / linux命令,只需要此问题的伪代码
我曾尝试使用sed -i 's/AAGCTT/A\'$'\nAGCTT/g'a分隔agcttwc -l来计算长度,但是我无法获得整个片段的长度。

解决方法

这里是可以使用的伪代码,假定整个文件都可以放入内存。它有2个步骤:

  • 将所有行合并为一个大字符串
  • 反复搜索模式,并返回偏移的片段
  • 假设索引从pos(Perl样式)开始,在“ s”中搜索“ pattern”。
  # Read complete input into memory
S = ""
while read P ; do
   S = S + P

  # Search for occurences
PREV=0
N=0
while true
    NEXT=index(S,'aagcct',PREV+1)
    if ( NEXT < 0 ) break   # no more occurences
    N=N+1
    print "Fragement ",N," from ",PREV," to ",NEXT,": length",NEXT-PREV+1
    print substr(S,NEXT-PREV) 
    PREV=NEXT

原始问题表明,为了计算打印的偏移量,需要对图案进行分割。这部分还不清楚,在此解决方案中未作说明。