首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将多个fasta序列分割成长度在fasta格式范围内的子串?

如何将多个fasta序列分割成长度在fasta格式范围内的子串?
EN

Stack Overflow用户
提问于 2019-01-05 11:37:08
回答 1查看 120关注 0票数 1

给定一个文件,其中包含多个长度不同的fasta格式的蛋白质序列,如何生成长度为i(i大于或等于5,但不超过每个蛋白质的长度)的fasta格式的蛋白质片段(子串)?

例如,蛋白质序列文件:

代码语言:javascript
运行
复制
>NP_12345.1
ACDEFGH
>XP_543211.2
KLMNOP
...

我想要输出fasta格式:

代码语言:javascript
运行
复制
>NP_12345.1(1-5)
ACDEF
>NP_12345.1(1-6)
ACDEFG
>NP_12345.1(1-7)
ACDEFGH
>NP_12345.1(2-6)
CDEFG
>NP_12345.1(2-7)
CDEFGH
>NP_12345.1(3-7)    
DEFGH
>XP_543211.2(1-5)
KLMNO
>XP_543211.2(1-6)
KLMNOP
>XP_543211.2(2-6)
LMNOP
...

有人能帮帮我吗?提前谢谢。

注意:我可以使用

代码语言:javascript
运行
复制
Seqkit sliding -s 1 -W 5 

为了生成只有5个氨基酸的fasta格式的蛋白质片段或肽,但是如果是6个氨基酸的肽,我必须修改参数-W 6。还有其他的一站式解决方案吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-05 12:07:34

对于Perl,请尝试:

代码语言:javascript
运行
复制
perl -e '
$/ = "\xd\xa";  # required if input.txt is created with DOS newline format
while (<>) {
    chomp($name = $_);
    chomp($seq = <>);
    $len = length($seq);
    for ($i = 0; $i <= $len - 5; $i++) {
        for ($j = $i + 5; $j <= $len; $j++) {
            printf("%s(%d-%d)\n", $name, $i+1, $j);
            print substr($seq, $i, $j-$i), "\n";
        }
    }
}' input.txt

这会产生:

代码语言:javascript
运行
复制
>NP_12345.1(1-5)
ACDEF
>NP_12345.1(1-6)
ACDEFG
>NP_12345.1(1-7)
ACDEFGH
>NP_12345.1(2-6)
CDEFG
>NP_12345.1(2-7)
CDEFGH
>NP_12345.1(3-7)
DEFGH
>XP_543211.2(1-5)
KLMNO
>XP_543211.2(1-6)
KLMNOP
>XP_543211.2(2-6)
LMNOP

希望这能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54048759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档