如何将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
相关产品推荐
相关产品推荐

