去重FASTA,保留一个seq id

Deduplicate FASTA, keep a seq id

我需要为 miRNA 识别工具 (miREAP) 格式化文件。

我有以下格式的 fasta 文件:

>seqID_1
CCCGGCCGTCGAGGC
>seqID_2
AGGGCACGCCTGCCTGGGCGTCACGC
>seqID_3
CCGCATCAGGTCTCCAAGGTGAACAGCCTCTGGTCGA
>seqID_4
CCGCATCAGGTCTCCAAGGTGAACAGCCTCTGGTCGA
>seqID_5
CCGCATCAGGTCTCCAAGGTGAACAGCCTCTGGTCGA
>seqID_6
AGGGCACGCCTGCCTGGGCGTCACGC

我想计算每个序列出现的次数并将该数字附加到 seqID 行。每个序列的计数和引用序列的原始 ID 只需要在文件中出现一次,如下所示:

>seqID_1 1
CCCGGCCGTCGAGGC
>seqID_2 2
AGGGCACGCCTGCCTGGGCGTCACGC
>seqID_3 3
CCGCATCAGGTCTCCAAGGTGAACAGCCTCTGGTCGA

Fastx_collapser 几乎 就如我所愿 (http://hannonlab.cshl.edu/fastx_toolkit/index.html)。但是,它不是维护 seqID,而是 returns:

>1 1
CCCGGCCGTCGAGGC
>2 2
AGGGCACGCCTGCCTGGGCGTCACGC
>3 3
CCGCATCAGGTCTCCAAGGTGAACAGCCTCTGGTCGA

这意味着我的序列、seqID 和基因组映射位置之间的 link 丢失了。 (每个 seqID 对应于我的 fasta 文件中的一个序列和一个单独的 Bowtie2 生成的 .sam 文件中的基因组映射点)

有没有一种简单的方法可以在命令行执行所需的重复数据删除?

谢谢!

线性化和sort/uniq -c

 awk '/^>/ {if(N>0) printf("\n"); ++N; printf("%s ",[=10=]);next;} {printf("%s",[=10=]);} END { printf("\n");}'  input.fa  | \
  sort -t ' ' -k2,2 | uniq -f 1 -c |\
  awk '{printf("%s_%s\n%s\n",,,);}'

>seqID_2_2
AGGGCACGCCTGCCTGGGCGTCACGC
>seqID_1_1
CCCGGCCGTCGAGGC
>seqID_3_3
CCGCATCAGGTCTCCAAGGTGAACAGCCTCTGGTCGA