Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Awk fasta(对齐)文件中的字符计数_Awk_Count_Char_Fasta - Fatal编程技术网

Awk fasta(对齐)文件中的字符计数

Awk fasta(对齐)文件中的字符计数,awk,count,char,fasta,Awk,Count,Char,Fasta,我试图找到一种方法来计算fasta(alignment)文件中字符(n)的重复次数,考虑到这是序列的开始或结束。忽略序列中的字符 例如: 输入: 染色体1 ============ nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn TGTGAGAGAGAGAGAGAGAGAGAGAGAG

我试图找到一种方法来计算fasta(alignment)文件中字符(n)的重复次数,考虑到这是序列的开始或结束。忽略序列中的字符

例如:

输入:

染色体1 ============ nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn TGTGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGAGTANCAAGTATCTATATACACAGAGAGTANCAATCATTCATTCAGCAT CCTGAAGGCCTCGCAAGGAAGAGCCACTGCCCAAACCGCCANNTAAAAGCCAGACTACGGTT nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn。 输出

71
74
此时,我可以计算整个序列中有多少个字符(n)

awk '{print gsub (srch,srch)}' srch="n"

但我需要一个想法(代码)来区分大块前后的两组

使用awk,您可以使用以下脚本。它计算
srch
的所有序列的长度,并在末尾打印找到的第一个和最后一个序列的长度:

# count.awk
BEGIN {
    FS=""
    n=0 
}

NR > 2 { 
    for(i=1; i<=NF; i++) {
        # Increment current group if current character equals srch
        if($i == srch) {
            grp[n]++
        } else {
            # Next group
            n++
            # Next character
            i++
            # Iterate trough line until next sequence of srch
            while($i != srch && i <= NF) {
                i++
                # The next sequence starts
                if ($i == srch) {
                    grp[n]++
                    break
                }
            }
        }
    }   
}
END {
    print "Begin: ", grp[0]
    print "End: ", grp[n-1]
}

我觉得这个问题相当模糊,但这个
awk
脚本可能会有所帮助:

/^n+\.$/ { print "after: " length($0) - 1; next; }
/^n+$/   { print "before: " length($0) }

如果希望在
>标题之后的第一行
和下一个
>标题之前的最后一行
或文件结尾,请尝试以下操作

awk '/^>/ { if (FNR>1) print n; n=0; p=1; next }
{ n=gsub("n", "n") }
p { print n; p=0 }
END { print n }' file.fasta

(我假设
================
行实际上不是您的数据的一部分。)

您的问题包括您发布的示例输入的预期输出。谢谢hek2mgl,但我不想要文件中n的整数的结果。我需要把开头的n和结尾的n分开。也忽略块内的那个。@Babi是第一个
n
始终在第一行,最后一个
n
始终在最后一行?不。仅在本例中是这样。在其他文件中,我有不同的n个数,可以超过一行。我还考虑过在一行中转换文件,并在n之后插入一个中断,但这将包括块内的小结果。谢谢。这就是我正在寻找的。请考虑如下的投票和/或接受;
awk '/^>/ { if (FNR>1) print n; n=0; p=1; next }
{ n=gsub("n", "n") }
p { print n; p=0 }
END { print n }' file.fasta