You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将FASTA文件序列按步长1分割为7字符片段并保存?

拆分FASTA蛋白序列为固定长度滑动窗口片段

需求:将FASTA文件中的蛋白质序列按步长1分割为长度7的字符片段,每个片段单独一行并保存到新文件中。

输入示例

$ cat file.fasta

name_of_the_protein
MRPPQCLLHTPSLASPLLLLLLWLLGGGVGAEGREDAELLVTVRGGRLRGIRLKTPGGPVSAFLGIPFAE
PPMGPRRFLPPEPKQPWSGVVDATTFQSVCYQYVDTLYPGFEGTEMWNPNRELSEDCLYLNVWTPYPRPT

预期输出示例

$ cat new_file.txt

MRPPQCL
RPPQCLL
PPQCLLH
PQCLLHT
QCLLHTP
CLLHTPS
...

解决方案

方法1:使用awk命令

适合快速处理文本,无需额外编程环境。

# 处理单序列FASTA(如示例格式)
awk '!/^[a-zA-Z_]+$/{seq = seq $0} END{for(i=1; i<=length(seq)-6; i++) print substr(seq, i, 7)}' file.fasta > new_file.txt

如果你的FASTA包含多个蛋白序列(每个序列前有独立标题行),可以用这个版本,自动分隔处理每个序列:

awk '
/^[a-zA-Z_]+$/{
    if(seq != ""){
        for(i=1; i<=length(seq)-6; i++) print substr(seq, i, 7)
        seq = ""
    }
    next
}
{seq = seq $0}
END{
    if(seq != ""){
        for(i=1; i<=length(seq)-6; i++) print substr(seq, i, 7)
    }
}' file.fasta > new_file.txt

方法2:使用Python脚本

适合需要灵活调整逻辑(比如处理标准FASTA格式、添加额外过滤规则)的场景:

with open('file.fasta', 'r') as infile, open('new_file.txt', 'w') as outfile:
    sequence = ""
    for line in infile:
        line = line.strip()
        if not line:
            continue
        # 跳过标题行:这里判断逻辑可根据实际FASTA格式调整,比如标准FASTA标题以">"开头
        if line.startswith('>') or (line.isalpha() and not line.isupper()):
            continue
        sequence += line
    # 生成步长为1、长度为7的滑动窗口片段
    for idx in range(len(sequence) - 6):
        outfile.write(f"{sequence[idx:idx+7]}\n")

内容的提问来源于stack exchange,提问作者Hugo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 02:15:38