我有一个fastq文件,其中读数超过1亿,基因组序列长度为10000
我想从fastq文件中取出序列并在基因组序列中搜索,允许3个不匹配
我用这种方式尝试使用awk我从fastq文件获取序列:
1.fq(几行)
@ DH1DQQN1:269:C1UKCACXX:1:1101:1207:2171 1:N:0:TTAGGC NATCCCCATCCTCTGCTTGCTTTTCGGGATATGTTGTAGGATTCTCAGC
+
1 = ADBDDHD f是氟烃基; GF @ FFEFGGGIAEEI D9DDHHIGAAF:?BG39 BB
@ DH1DQQN1: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不匹配
答案 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)
我认为您应该考虑使用专为此数据设计的对齐工具,原因如下:
出于这些原因以及其他原因,您提出的任何脚本可能都不会像现有工具那样快速和完整。如果要指定要保留的不匹配数,而不是对齐所有读取然后解析输出,则可以使用Vmatch(如果您有权访问它)(此工具非常快且适用于许多匹配任务)。