【发布时间】:2018-09-03 03:04:14
【问题描述】:
我有一个字符序列,我想将每个序列从头到尾拆分为3-characters class。并获取每个班级的人数。这是 2 IDs 的字符序列的一个小例子。
>ID1
ATGTCCAAGGGGATCCTGCAGGTGCATCCTCCGATCTGCGACTGCCCGGGCTGCCGAATA
TCCTCCCCGGTGAACCGGGGGCGGCTGGCAGACAAGAGGACAGTCGCCCTGCCTGCCGCC
>ID2
ATGAAACTTTCACCTGCGCTCCCGGGAACAGTTTCTGCTCGGACTCCTGATCGTTCACCT
CCCTGTTTTCCCGACAGCGAGGACTGTCTTTTCCAACCCGACATGGATGTGCTCCCAATG
ACCTGCCCGCCACCACCAGTTCCAAAGTTTGCACTCCTTAAGGATTATAGGCCTTCAGCT
这是ID1 的一个小例子。我想为输入文件中的所有IDs 获得相同的输出(属于每个ID 的字符行在下一行)。下一个 ID 的计数紧随第一个之后。
ID1_3nt count
ATG 1
TCC 3
AAG 2
GGG 2
ATC 2
CTG 3
CAG 1
GTG 2
CAT 1
CCT 2
CCG 3
TGC 3
GAC 2
GGC 1
CGA 1
ATA 1
AAC 1
CGG 2
GCA 1
AGG 1
GCC 3
ACA 1
GTC 1
我试过这段代码:
awk '{i=0; printf ">%s\n",$2; while(i<=length($1)) {printf "%s\n", substr($1,i,3);i+=3}} /,substr,/ {count++}' | awk 'END { printf(" ID_3nt: %d",count)}
但没有返回我想要的。你知道如何改进吗?
【问题讨论】:
-
当前代码有什么问题?
awk要求严格吗? -
它没有返回与我正在寻找的相同的输出。我正在使用 awk。
-
它输出什么?
awk是严格要求吗? -
@john,请解释一下 count 是如何输出的?
-
假设输入只有
ATGTCCAAGGGG,应该是4个三元组(ATG、TCC、AAG、GGG),还是应该是10个三元组(ATG,TGT,GTC,TCC,……GGG)?这从您的预期输出中并不清楚(需要大量计算才能得出答案)。三胞胎的顺序和计数重要吗?