查看原文
其他

不会编程,如何快速提取序列

基因学苑 基因学苑 2023-08-18

提取序列是生物信息分析中常见的一个操作,也是学习生物信息编程的入门操作。通常是给定基因ID,然后从一个大的数据集里面提取出匹配ID的序列,包含匹配的序列ID和序列信息,类似于Excel中的Vlookup,但是这里需要一个包含序列ID的列表以及一个包含序列的fasta格式文件。如果不会编程该如何提取呢,今天我们就介绍一些方法。

例如这里有五条序列,我们需要根据基因ID,提取出gene3和gene5的内容。

>gene1
AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTCTCTGACAGCAGC
TTCTGAACTGGTTACCTGCCGTGAGTAAATTAAAATTTTATTGACTTAGGTCACTAAATACTTTAACCAA
TATAGGCATAGCGCACAGACAGATAAAAATTACAGAGTACACAACATCCATGAAACGCATTAGCACCACC
>gene2
ATTACCACCACCATCACCACCACCATCACCATTACCATTACCACAGGTAACGGTGCGGGCTGACGCGTAC
AGGAAACACAGAAAAAAGCCCGCACCTGACAGTGCGGGCTTTTTTTTCGACCAAAGGTAACGAGGTAACA
>gene3
ACCATGCGAGTGTTGAAGTTCGGCGGTACATCAGTGGCAAATGCAGAACGTTTTCTGCGGGTTGCCGATA
TTCTGGAAAGCAATGCCAGGCAGGGGCAGGTGGCCACCGTCCTCTCTGCCCCCGCCAAAATCACCAACCA
CCTGGTGGCGATGATTGAAAAAACCATTAGCGGCCAGGATGCTTTACCCAATATCAGCGATGCCGAACGT
ATTTTTGCCGAACTTCTGACGGGACTCGCCGCCGCCCAGCCGGGATTCCCGCTGGCGCAATTGAAAACTT
>gene4
TCGTCGACCAGGAATTTGCCCAAATAAAACATGTCCTGCATGGCATTAGTTTGTTAGGGCAGTGCCCGGA
TAGCATTAACGCTGCGCTGATTTGCCGTGGCGAGAAAATGTCGATCGCCATTATGGCCGGCGTATTAGAA
>gene5
GCGCGCGGTCACAACGTTACCGTTATCGATCCGGTCGAAAAACTGCTGGCAGTGGGGCATTACCTCGAAT
CTACTGTCGATATTGCAGAGTCCACCCGCCGTATTGCGGCAAGTCGTATTCCGGCTGATCACATGGTGCT
GATGGCAGGTTTCACCGCCGGTAATGAAAAAGGCGAACTGGTGGTACTTGGACGCAACGGTTCCGACTAC
TCCGCGGCGGTGCTGGCTGCCTGTTTACGCGCCGATTGTTGCGAGATTTGGACGGACGTTGACGGGGTAT

原始方法

直接用文本编辑器打开,然后直接Ctrl+C复制,Ctrl+V粘贴,不过这样处理稍微大一点的数据,不仅效率低下,而且很容易出错,直至就会把人搞奔溃,我们坚决抵制这种做法。

sed

利用sed提取,我们首先使用less -N查看一下这两条序列对应的行号,然后就可以利用sed输出任意行的内容了。

less -N gene.fna
sed -n '8,12p;16,20p' gene.fna

awk

awk也可以输出固定行的内容,或者匹配固定行的内容。其中NR代表行号,number row。

awk 'NR>=8  && NR<12 {print}' gene.fna
awk 'NR>=16 && NR<20 {print}' gene.fna

grep

grep可以用于匹配ID,-A选项可以设置输出匹配后的几行,我们首先利用seqtk工具将fasta序列都格式化为两行一个单位。

seqtk seq -l 0 gene.fna >gene.fa
grep -A 1 "gene[3|5]gene.fa

samtools

以上几种方法处理一些小序列还行,如果一次有100个基因ID,也不太方便。
这种情况下强烈推荐samtools工具。利用samtools建立索引,就可以完成快速提取序列。

#首先为利用faidx为fasta文件建立索引
samtools faidx gene.fna
#创建索引之后就可以快速提取了
samtools faidx gene.fna gene3 gene5

编程

其实用编程也很容易实现,无论是perl还是python都不难,首先将ID和序列存储为一个哈希或者字典型的数据结构,然后就可以很方便的利用ID进行查找了。

#将基因ID写入到gene.list文件中,每行一个基因ID
perl get_seq_bylist.pl gene.list gene.fna

后台回复“提取序列”,获得该程序,如果你有更好的方法,也可以留言给我们。

---------- END ----------

(可以添加作者微信,备注好单位+姓名)



您可能还会感兴趣的

手把手教你生信分析平台搭建专栏合集
生物信息重要资源站点合集
一个人全基因组完整数据分析脚本
一个细菌基因组完整分析脚本
生物信息常用30个Linux命令(三)
基因学苑文章列表(201810)
如何在Linux下优雅的装X
利用R实现vlookup
生物学才是终极学科


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存