2013-04-17 47 views
0

我有36-nt這樣讀取:atcttgttcaatggccgatcXXXXgtcgacaatcaa在fastq文件 中,XXXX是不同的條形碼。我想在準確的位置(21到24)搜索文件中的條形碼,然後打印序列中最多3個不匹配的序列,而不是條形碼。找到序列不匹配的DNA條形碼

例如: 我有條碼:aacg 搜索該位置21之間的條碼,以24 FASTQ文件,允許3個錯配像的順序:

atcttgttcaatggccgatcaacggtcgacaatcaC# it has 1 mismatch 
ttcttgttcaatggccgatcaacggtcgacaatcaC# it has 2 mismatch 
tccttgttcaatggccgatcaacggtcgacaatcaC# it has 3 mismatch 

我是想先找到獨特的線條使用awk並尋找不匹配,但對於我來說,查找並找到它們非常繁瑣。

awk 'NR%4==2' 1.fq |sort|uniq -c|awk '{print $1"\t"$2}' > out1.txt 

有沒有什麼快捷方式可以找到?

謝謝。

+0

我很困惑。條形碼與核苷酸序列有什麼關係? – Kevin

+0

最初我正在尋找特定位置的條形碼,而且我的計數很低,並且在序列中有1個不匹配,我得到了高count.so,如果我在序列中給出不匹配,我將獲得更多序列(並且我想嘗試upto 3) – abh

+0

所以你正在掃描[條碼](http://en.wikipedia.org/wiki/Barcode)?比如,超市收銀員用來識別物品價格的黑色和白色條紋圖案?因爲我還不知道如何從條形碼中獲得DNA。 – Kevin

回答

1

使用Python:

strs = "atcttgttcaatggccgatcaacggtcgacaatcaa" 

with open("1.fq") as f: 
    for line in f: 
     if line[20:24] == "aacg": 
      line = line.strip() 
      mismatches = sum(x!=y for x, y in zip(strs, line)) 
      if mismatches <= 3: 
       print line, mismatches 

atcttgttcaatggccgatcaacggtcgacaatcac 1 
ttcttgttcaatggccgatcaacggtcgacaatcac 2 
tccttgttcaatggccgatcaacggtcgacaatcac 3 
+0

ATCTTGTTCAATGGCCGATCAACGGTCGACAATCAA ATCTTGTTCAATGGCCGATCAACGCTCGACAATCAA 3 AGCTTGTTCAATGGCCGATCAACGCTCGACAATCAA 2我感到困惑與這裏輸出是一些線,在該第一個是原序列和編號3具有1個錯配和2具有2 mismatches.what我想要的是它應該打印相似的序列(說0)和1,2,3錯配序列@Ashwini喬杜裏 – abh

0

使用Python:

import re 
seq="atcttgttcaatggccgatcaacggtcgacaatcaa" 
D = [ c for c in seq ] 
with open("input") as f: 
    for line in f: 
     line=line.rstrip('\n') 
     if re.match(".{20}aacg", line): 
      cnt = sum([ 1 for c,d in zip(line,D) if c != d]) 
      if cnt < 4: 
       print cnt, line 
+0

我剛剛看了一些輸出1 ATCTTGTTCAATGGCCGATCAACGGCCGACAATCAA 2 ATCTTGTTCAATGGCCGATCAACGGTCGACAATCAA但第二個類似於序列,它是說我2錯配爲什麼? – abh

+0

必須有序列中2個錯配 – perreal

+0

原ATCTTGTTCAATGGCCGATCAACGGTCGACAATCAA 0 AGCTTGTTCAATGGCCGATCAACGGCCGACAATCAA 1 AGCTTGTTCAATGGCCGATCAACGGTCGACAATCAA 2 ATCTTGTTCAATGGCCGATCAACGGTCGACAATCAA 3 ATCTTGATCAATGGCCGATCAACGGTCGACAATCAA這裏有一些我得到了線的@perreal – abh

0

使用Python正則表達式模塊允許你指定使用捕獲組不匹配

import regex #intended as a replacement for re 
from Bio import SeqIO 
import collections 

d = collections.defaultdict(list) 
motif = r'((atcttgttcaatggccgatc)(....)(gtcgacaatcaa)){e<4}' #e<4 = less than 4 errors 
records = list(SeqIO.parse(open(infile), "fastq")) 
for record in records: 
    seq = str(record.seq) 
    match = regex.search(motif, seq, regex.BESTMATCH) 
    barcode = match.group(3) 
    sequence = match.group(0) 
    d[barcode].append(sequence) # store as a dictionary key = barcode, value = list of sequences 
for k, v in d.items(): 
    print("barcode = %s" % (k)) 
    for i in v: 
     print("sequence = %s" % (i)) 

的數量,第四組(3),將條碼