我有一个平面文件,每个簇包含多个序列比对。文件的概念如下所示:
# Input file.fasta
>ID1
>ID1
BSMCMKMA
>ID2
OINAOINV
>ID3
MPOMMSG
>ID4
>ID4
MMVAMOPMOP
>ID5
MMIOPMMOPVOM
>ID6
>ID6
POOPAMPOFM
新集群启动的模式是代表序列的ID出现两次。因此,在此示例中,有三个集群,第一个集群包含ID1,ID2,ID3,第二个集群包含ID4,ID5,第三个仅包含ID6,因为在该集群中,基本上只有一个序列。
如何读取文件并为每个集群创建文件,其阈值应为集群至少包含两个ID序列对,例如(ID1,ID2,ID3)和(ID4,ID5) )及其顺序在每个括号中每个文件写入一个文件,但(ID6)不写,因为它只包含一个顺序。
# desired output
# file_ID1.fasta
>ID1
BSMCMKMA
>ID2
OINAOINV
>ID3
MPOMMSG
# file_ID4.fasta
>ID4
MMVAMOPMOP
>ID5
MMIOPMMOPVOM
我考虑过使用awk,但是我不知道如何编写awk应该寻找的模式!我相信我可以找到使用python的方法,但是我希望bash有更好,更快的方法。
感谢您的帮助!
答案 0 :(得分:0)
回答我自己的问题,以下是答案:
gawk '{ if($1 ~ ">") {if (prev==$1) {n++} ; prev=$1 ; next} else {print prev > "ID"n; print > "ID"n; close()}}' input.fasta