3

我想从输入fasta文件中检索第n序列(或者最好是第n到第m序列),最好使用unix“单线”。

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

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

>SEQUENCE_1
MTEITAAMVKELRESTGAGMMDCKNALSETNGDFDKAVQLLREKGLGKAAKKADRLAAEG
LVSVKVSDDFTIAAMRPSYLSYEDLDMTFVENEYKALVAELEKENEERRRLKDPNKPEHK
IPQFASRKQLSDAILKEAEEKIKEELKAQGKPEKIWDNIIPGKMNSFIADNSQLDSKLTL
MGQFYVMDDKKTVEQVIAEKEKEFGGKIKIVEFICFEVGEGLEKKTEDFAAEVAAQL
>SEQUENCE_2
SATVSEINSETDFVAKNDQFIALTKDTTAHIQSNSLQSVEELHSSTINGVKFEEYLKSQI
ATIGENLVVRRFATLKAGANGVVNGYIHTNGRVGVVIAAACDSAEVASKSRDLLRQICMH
4

4 回答 4

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
于 2013-06-20T22:55:19.180 回答
2

一种方法awk

awk -v RS='>' -v start=$n -v end=$m 'NR>=(start+1)&&NR<=(end+1){print ">"$0}' fasta_file
于 2013-06-20T23:07:25.840 回答
2

一个衬垫(不需要管道|):

sed '/>SEQUENCE_'$n'/, />SEQUENCE_'$(($m + 1))'/!d;{/>SEQUENCE_'$(($m + 1))'/d}' file
于 2013-06-21T04:47:14.610 回答
2

sed

sed -n '/SEQUENCE_'$n'/,/SEQUENCE_'$(($m + 1))'/p' input | sed '$d'
于 2013-06-20T23:46:02.310 回答