Awk 允许子集不匹配的Grep.fastq

Awk 允许子集不匹配的Grep.fastq,awk,grep,bioinformatics,fastq,sequencing,Awk,Grep,Bioinformatics,Fastq,Sequencing,我正在linux集群上与bash合作。如果.fastq文件包含与查询序列匹配的内容,我将尝试从中提取读取内容。下面是一个包含三次读取的.fastq文件示例 $cat示例.fastq @SRR1111111.1 1/1 CTGGANAAGTGAAATAATATAAATTTTTCCACTATTGAATAAAAGCAACTTAAATTTTCTAAGTCG + AAAAA#EEEEEEEEEEEEEEEEEEEEEEEAEEEEEEEEEEEEEEEEEEEEEEEEEA<AAEEEEE<6

我正在linux集群上与bash合作。如果.fastq文件包含与查询序列匹配的内容,我将尝试从中提取读取内容。下面是一个包含三次读取的.fastq文件示例

$cat示例.fastq

@SRR1111111.1 1/1
CTGGANAAGTGAAATAATATAAATTTTTCCACTATTGAATAAAAGCAACTTAAATTTTCTAAGTCG
+
AAAAA#EEEEEEEEEEEEEEEEEEEEEEEAEEEEEEEEEEEEEEEEEEEEEEEEEA<AAEEEEE<6
@SRR1111111.2 2/1
CTATANTATTCTATATTTATTCTAGATAAAAGCATTCTATATTTAGCATATGTCTAGCAAAAAAAA
+
AAAAA#EE6EEEEEEEEEEEEAAEEAEEEEEEEEEEEE/EAE/EAE/EA/EAEAAAE//EEAEAA6
@SRR1111111.3 3/1
CTATANTATTGAAATAATAATGTAGATAAAACTATTGAATAACAGCAACTTAAATTTTCAATAAGA
+
AAAAA#EE6EEEEEEEEEEEEAAEEAEEEEEEEEEEEE/EAE/EAE/EA/EAEAAAE//EEAEAA6
@SRR1111111.1 1/1
CTGGANAAGTGAAATAATATAAATTTTTCCACTATTGAATAAAAGCAACTTAAATTTTCTAAGTCG
+
AAAAA#EEEEEEEEEEEEEEEEEEEEEEEAEEEEEEEEEEEEEEEEEEEEEEEEEA<AAEEEEE<6
@SRR1111111.3 3/1
CTATANTATTGAAATAATAATGTAGATAAAACTATTGAATAACAGCAACTTAAATTTTCAATAAGA
+
AAAAA#EE6EEEEEEEEEEEEAAEEAEEEEEEEEEEEE/EAE/EAE/EA/EAEAAAE//EEAEAA6
$cat MATCH.fastq

@SRR1111111.1 1/1
CTGGANAAGTGAAATAATATAAATTTTTCCACTATTGAATAAAAGCAACTTAAATTTTCTAAGTCG
+
AAAAA#EEEEEEEEEEEEEEEEEEEEEEEAEEEEEEEEEEEEEEEEEEEEEEEEEA<AAEEEEE<6
@SRR1111111.2 2/1
CTATANTATTCTATATTTATTCTAGATAAAAGCATTCTATATTTAGCATATGTCTAGCAAAAAAAA
+
AAAAA#EE6EEEEEEEEEEEEAAEEAEEEEEEEEEEEE/EAE/EAE/EA/EAEAAAE//EEAEAA6
@SRR1111111.3 3/1
CTATANTATTGAAATAATAATGTAGATAAAACTATTGAATAACAGCAACTTAAATTTTCAATAAGA
+
AAAAA#EE6EEEEEEEEEEEEAAEEAEEEEEEEEEEEE/EAE/EAE/EA/EAEAAAE//EEAEAA6
@SRR1111111.1 1/1
CTGGANAAGTGAAATAATATAAATTTTTCCACTATTGAATAAAAGCAACTTAAATTTTCTAAGTCG
+
AAAAA#EEEEEEEEEEEEEEEEEEEEEEEAEEEEEEEEEEEEEEEEEEEEEEEEEA<AAEEEEE<6
@SRR1111111.3 3/1
CTATANTATTGAAATAATAATGTAGATAAAACTATTGAATAACAGCAACTTAAATTTTCAATAAGA
+
AAAAA#EE6EEEEEEEEEEEEAAEEAEEEEEEEEEEEE/EAE/EAE/EA/EAEAAAE//EEAEAA6
@srr111111.1 1/1
CTGGANAGTGAATATATAAATTTCACTATTGAATAAAAGCACTTAAATTCTTAAGTCG
+

aaaaaa#eeeeeeeeeeeeeea这里有一个解决方案,使用
agrep
获取匹配的记录数,并使用一个awk打印出带有某些上下文的记录(由于
agrep
中缺少
-a
-B
):

$agrep-1-n“GAAATGATA”文件

awk-F:'NR==FNR{for(i=($1-1);i这里有一个解决方案,使用
agrep
获得匹配的记录数,并使用一个awk打印出带有某些上下文的记录(由于
agrep
中缺少
-a
-B
):

$agrep-1-n“GAAATGATA”文件

awk-F:'NR==FNR{for(i=($1-1);i您可以尝试一个模式文件-

$: cat GAAATAATA
.AAATAATA
G.AATAATA
GA.ATAATA
GAA.TAATA
GAAA.AATA
GAAAT.ATA
GAAATA.TA
GAAATAA.A
GAAATAAT.
然后

但是,为每个可能的单个更改添加完整的正则表达式解析和替代模式可能会使过程慢一点

答复评论中的问题:

对于给定的
$word
,例如
word=gaatata

awk '{
  for ( i=1; i<=length($0); i++ ) {
     split($0,tmp,""); tmp[i]=".";
     for ( n=1; n<=length($0); n++ ) { printf tmp[n]; }
     printf "\n";
  }
}' <<< "$word" > "$word"
awk'{

对于(i=1;i您可以尝试一个模式文件-

$: cat GAAATAATA
.AAATAATA
G.AATAATA
GA.ATAATA
GAA.TAATA
GAAA.AATA
GAAAT.ATA
GAAATA.TA
GAAATAA.A
GAAATAAT.
然后

但是,为每个可能的单个更改添加完整的正则表达式解析和替代模式可能会使过程慢一点

答复评论中的问题:

对于给定的
$word
,例如
word=gaatata

awk '{
  for ( i=1; i<=length($0); i++ ) {
     split($0,tmp,""); tmp[i]=".";
     for ( n=1; n<=length($0); n++ ) { printf tmp[n]; }
     printf "\n";
  }
}' <<< "$word" > "$word"
awk'{

对于(i=1;i这应该有效,但如果问题中的
匹配,则idk。fastq
是否为预期输出,或者即使您的示例输入包含任何需要有效解决方案才能找到so idk的情况,如果它实际有效或无效:

$ cat tst.awk
BEGIN {
    for (i=1; i<=length(seq); i++) {
        regexp = regexp sep substr(seq,1,i-1) "." substr(seq,i+1)
        sep = "|"
    }
}
{ rec = rec $0 ORS }
!(NR % 4) {
    if (rec ~ regexp) {
        printf "%s", rec
    }
    rec = ""
}

$ awk -v seq='GAAATAATA' -f tst.awk example.fastq
@SRR1111111.1 1/1
CTGGANAAGTGAAATAATATAAATTTTTCCACTATTGAATAAAAGCAACTTAAATTTTCTAAGTCG
+
AAAAA#EEEEEEEEEEEEEEEEEEEEEEEAEEEEEEEEEEEEEEEEEEEEEEEEEA<AAEEEEE<6
@SRR1111111.3 3/1
CTATANTATTGAAATAATAATGTAGATAAAACTATTGAATAACAGCAACTTAAATTTTCAATAAGA
+
AAAAA#EE6EEEEEEEEEEEEAAEEAEEEEEEEEEEEE/EAE/EAE/EA/EAEAAAE//EEAEAA6
$cat tst.awk
开始{

对于(i=1;i这应该有效,但如果问题中的
匹配,则idk。fastq
是否为预期输出,或者即使您的示例输入包含任何需要有效解决方案才能找到so idk的情况,如果它实际有效或无效:

$ cat tst.awk
BEGIN {
    for (i=1; i<=length(seq); i++) {
        regexp = regexp sep substr(seq,1,i-1) "." substr(seq,i+1)
        sep = "|"
    }
}
{ rec = rec $0 ORS }
!(NR % 4) {
    if (rec ~ regexp) {
        printf "%s", rec
    }
    rec = ""
}

$ awk -v seq='GAAATAATA' -f tst.awk example.fastq
@SRR1111111.1 1/1
CTGGANAAGTGAAATAATATAAATTTTTCCACTATTGAATAAAAGCAACTTAAATTTTCTAAGTCG
+
AAAAA#EEEEEEEEEEEEEEEEEEEEEEEAEEEEEEEEEEEEEEEEEEEEEEEEEA<AAEEEEE<6
@SRR1111111.3 3/1
CTATANTATTGAAATAATAATGTAGATAAAACTATTGAATAACAGCAACTTAAATTTTCAATAAGA
+
AAAAA#EE6EEEEEEEEEEEEAAEEAEEEEEEEEEEEE/EAE/EAE/EA/EAEAAAE//EEAEAA6
$cat tst.awk
开始{

对于(i=1;iWell,有具有近似匹配功能的
agrep
agrep-1“GAAATGATA”
-1
允许一个不匹配。不幸的是,我认为它没有前后上下文(
grep-A-B
)的开关。不匹配可以是任何字符吗?我假设它是
[GATC]
,但是我们需要指定它吗,或者将其作为一种假设是安全的?您是否尝试过对只包含您正在查找的序列的索引进行对齐?也许标准对齐器可以处理这种情况。@Poshi,这是我在考虑做的事情,在我的脑海中,我需要一个.fastq格式d匹配文件作为输出。你知道像STAR这样的和对齐器是否可行吗?如果我没有错的话,STAR是面向RNA的。你为什么不试试标准的DNA呢?蝴蝶结,BWA…在BWA中,你只需要创建索引:
BWA索引引用。fasta
,然后执行对齐
BWA mem index fastq
。我只是担心关于它将如何处理这么短的引用,但尝试会很快。嗯,有一个具有近似匹配功能的
agrep
agrep-1“GAAATGATA”
-1
允许一个不匹配。不幸的是,我认为它没有前后上下文的切换(
grep-a-B
).不匹配可以是任何字符吗?我假设它将是
[GATC]
,但是我们需要指定它吗,或者将其作为一种假设是安全的?您是否尝试过对只包含您正在查找的序列的索引进行对齐?也许标准对齐器可以处理这种情况。@Poshi,这是我在考虑做的事情,在我的脑海中,我需要一个.fastq格式d匹配文件作为输出。你知道像STAR这样的和对齐器是否可行吗?如果我没有错的话,STAR是面向RNA的。你为什么不试试标准的DNA呢?蝴蝶结,BWA…在BWA中,你只需要创建索引:
BWA索引引用。fasta
,然后执行对齐
BWA mem index fastq
。我只是担心关于它将如何处理这么短的引用,但是尝试会很快。我发现了这个解决方案的一个问题,我希望您愿意对此进行评论。即使没有匹配项,这个解决方案也会输出前两行。下面是一个示例
agrep-1-n“TAGATAAAACT”example.fastq|awk-F:'NR==FNR{for(I=($1-1);如果存在匹配项,请尝试:
grep-n“TAGATAAAACT”示例。fastq
澄清
grep-n“TAGATAAAACT”示例。fastq
在第10行返回匹配项。但解决方案返回第1、2、9、10、11、12行。不应返回第1行和第2行
agrep-1-n“TAGATAAAACT”文件
仅返回第10行和
agrep-1-n行“Tagataaact | awk…
返回第9-12行。使用4种不同的awk以及unix和Dos行结尾进行了尝试。我发现了此解决方案的一个问题,希望您愿意对此进行评论。即使没有匹配项,此解决方案也会输出前两行。下面是一个示例
agrep-1-n“Tagataaact”example.fastq | awk-F:'NR==FNR{for(i=($1-1);如果存在匹配项,请尝试:
grep-n“TAGATAAAACT”example.fastq
以澄清
grep-n“TAGATAAAACT”示例。fastq
在第10行返回匹配项。但解决方案返回第1、2、9、10、11、12行。第1和第2行不应返回
agrep-1-n“TAGATAAAACT”文件
仅返回第10行,而
agrep-1-n“TAGATAAAACT | awk…
返回第9-12行。尝试了4种不同的awk以及unix和Dos行结尾。这是一个有趣的想法