从具有Regex的fasta文件中获取特定序列

时间:2013-06-20 22:38:59

标签: regex perl sed awk fasta

我想从输入的fasta文件中检索n th 序列(或者最好是n th 到m th 序列),理想情况下使用unix“one-liner”。

我知道我可以用perl(或任何其他脚本语言)读取序列,计数,然后打印序列,但我正在寻找更快更紧凑的东西。

对于那些不知道的人,示例fasta文件如下所示:

>SEQUENCE_1
MTEITAAMVKELRESTGAGMMDCKNALSETNGDFDKAVQLLREKGLGKAAKKADRLAAEG
LVSVKVSDDFTIAAMRPSYLSYEDLDMTFVENEYKALVAELEKENEERRRLKDPNKPEHK
IPQFASRKQLSDAILKEAEEKIKEELKAQGKPEKIWDNIIPGKMNSFIADNSQLDSKLTL
MGQFYVMDDKKTVEQVIAEKEKEFGGKIKIVEFICFEVGEGLEKKTEDFAAEVAAQL
>SEQUENCE_2
SATVSEINSETDFVAKNDQFIALTKDTTAHIQSNSLQSVEELHSSTINGVKFEEYLKSQI
ATIGENLVVRRFATLKAGANGVVNGYIHTNGRVGVVIAAACDSAEVASKSRDLLRQICMH

4 个答案:

答案 0 :(得分:2)

以下是使用awk的两种方式。

如果您的序列每行包裹1次,这将起作用:

awk -v n=5 -v m=8 'NR == n * 2 - 1, NR == m * 2' file.fa

如果未包装序列行,则可能更合适:

awk -v n=5 -v m=8 '/^>/ { c++ } c == n { f=1 } c == m + 1 { f=0 } f' file.fa

答案 1 :(得分:2)

awk的一种方式:

awk -v RS='>' -v start=$n -v end=$m 'NR>=(start+1)&&NR<=(end+1){print ">"$0}' fasta_file

答案 2 :(得分:2)

使用sed

sed -n '/SEQUENCE_'$n'/,/SEQUENCE_'$(($m + 1))'/p' input | sed '$d'

答案 3 :(得分:2)

一个班轮(不需要管道|):

sed '/>SEQUENCE_'$n'/, />SEQUENCE_'$(($m + 1))'/!d;{/>SEQUENCE_'$(($m + 1))'/d}' file