重新复制FASTA,保留seq id

时间:2015-07-23 19:09:21

标签: command-line formatting bioinformatics fasta

我需要格式化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,而是返回:

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

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

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

谢谢!

1 个答案:

答案 0 :(得分:1)

线性化和排序/ uniq -c

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

>seqID_2_2
AGGGCACGCCTGCCTGGGCGTCACGC
>seqID_1_1
CCCGGCCGTCGAGGC
>seqID_3_3
CCGCATCAGGTCTCCAAGGTGAACAGCCTCTGGTCGA