在具有错配的基因组中搜索序列

时间:2013-05-02 17:17:27

标签: python perl awk biopython bioperl

我有一个fastq文件,其中读数超过1亿,基因组序列长度为10000

我想从fastq文件中取出序列并在基因组序列中搜索,允许3个不匹配

我用这种方式尝试使用awk我从fastq文件获取序列:

1.fq(几行)

  

@ DH​​1DQQN1:269:C1UKCACXX:1:1101:1207:2171 1:N:0:TTAGGC   NATCCCCATCCTCTGCTTGCTTTTCGGGATATGTTGTAGGATTCTCAGC

     

+

     

1 = ADBDDHD f是氟烃基; GF @ FFEFGGGIAEEI D9DDHHIGAAF:?BG39 BB

     

@ DH​​1DQQN1:269:C1UKCACXX:1:1101:1095:2217 1:N:0:TTAGGC   TAGGATTTCAAATGGGTCGAGGTGGTCCGTTAGGTATAGGGGCAACAGG

     

+

     

?? AABDD4C:DDDI + C:C3 @:C):1 *):???)################

     

$ awk'NR%4 == 2'1.fq

     

NATCCCCATCCTCTGCTTGCTTTTCGGGATATGTTGTAGGATTCTCAGC   TAGGATTTCAAATGGGTCGAGGTGGTCCGTTAGGTATAGGGGCAACAGG

我有所有序列存档,现在我想采取每行序列并在基因组序列中搜索,允许3个不匹配,如果它找到打印序列

示例:

基因组序列文件:

  

GGGGAGGAATATGATTTACAGTTTATTTTTCAACTGTGCAAAATAACCTTAACTGCAGACGTTATGACATACATACATTCTATGAATTCCACTATTTTGGAGGACTGGAATTTTGGTCTACAACCTCCCCCAGGAGGCACACTAGAAGATACTTATAGGTTTGTAACCCAGGCAATTGCTTGTCAAAAACATACA

搜索序列文件:

  

GGGGAGGAATATGAT

     

GGGGAGGAATATGAA

     

GGGGAGGAATATGCC

     

TCAAAAACATAGG

     

TCAAAAACATGGG

输出文件:

  

GGGGAGGAATATGAT 0#0错配精确序列

     

GGGGAGGAATATGAA 1#1不匹配

     

GGGGAGGAATATGCC 2#2不匹配

     

TCAAAAACATAGG 2#2不匹配

     

TCAAAAACATGGG 3#3不匹配

2 个答案:

答案 0 :(得分:2)

之类的东西?

use 5.012;
use strict;
use warnings;
use String::Approx qw(aslice);
use File::Slurp;
use Data::Dumper;

my $genseq = "gseq.txt"; #the long sequence

$_ = read_file($genseq);

#read small patterns from stdin
while(my $patt = <>) {
    chomp $patt;
    my $len = length($patt);
    my($index, $size, $distance) = aslice($patt, ["3D0S3", "minimal_distance"]);
    say "$patt matched approx. at $index with mismatch $distance" if $distance <= 3;
}

为你输入产生:

GGGGAGGAATATGAT matched approx. at 0 with mismatch 0
GGGGAGGAATATGAA matched approx. at 0 with mismatch 1
GGGGAGGAATATGCC matched approx. at 0 with mismatch 2
TCAAAAACATAGG matched approx. at 179 with mismatch 2
TCAAAAACATGGG matched approx. at 179 with mismatch 3

老实说,不知道如何使用10000个字符长的genseq ......

答案 1 :(得分:0)

我认为您应该考虑使用专为此数据设计的对齐工具,原因如下:

  • 这些工具也会找到反向补充的匹配(但是,你也可以实现这个)。
  • Aligners将正确处理配对末尾读取和多个匹配。
  • 大多数对齐器都是用C语言编写的,并使用为此数据量设计的数据结构和算法。

出于这些原因以及其他原因,您提出的任何脚本可能都不会像现有工具那样快速和完整。如果要指定要保留的不匹配数,而不是对齐所有读取然后解析输出,则可以使用Vmatch(如果您有权访问它)(此工具非常快且适用于许多匹配任务)。