创建用于重复行模式的输出文件

时间:2018-07-03 11:38:19

标签: bash unix

我有一个平面文件,每个簇包含多个序列比对。文件的概念如下所示:

# 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有更好,更快的方法。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

回答我自己的问题,以下是答案:

gawk '{ if($1 ~ ">") {if (prev==$1) {n++} ; prev=$1 ; next} else {print prev > "ID"n; print > "ID"n; close()}}' input.fasta