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

在MacOS、Unix系统中用awk从Stockholm格式文件提取两个独立字符串

用awk提取Stockholm格式文件中的目标字符串

假设你需要提取的是序列ID(比如WP_002855993.1/5-168)和对应的纯氨基酸序列(去除所有非字母字符),或者是提取#=GS行中的功能描述(DE字段)和序列ID,下面分两种常见场景给出解决方案:

场景1:提取序列ID与纯氨基酸序列

这个awk命令会自动识别非注释行(行首不是#的行),提取第一个字段作为序列ID,再把该行里的短横线、点、空格等非字母字符全部清除,得到干净的氨基酸序列:

/^[^#]/ {
    id = $1
    seq = substr($0, length(id)+1)
    gsub(/[^A-Za-z]/, "", seq)
    print "ID: " id
    print "Sequence: " seq
    print "---"
}

运行方式

把上述代码保存为extract_stockholm_seq.awk,然后在终端执行:

awk -f extract_stockholm_seq.awk your_stockholm_file.sto

针对你提供的示例内容,输出结果会是:

ID: WP_002855993.1/5-168
Sequence: LEHNGKKYSDKDLIDAFYQLGIKRGDILCVHTELmkfgKALLTKNNDFLKTLLECFFKVLGKEGTLLMPTFTYSFCKNEVYDKVHSKGKVGVLNEFFRTSGgGVRRTSDPIFSFAVKGAKADIFLKENSSCFGKDSVYEILTREGGKFMLLG
---

场景2:提取#=GS行的功能描述与对应序列ID

如果需要提取注释行里的功能说明和关联的序列ID,用这个awk命令就能实现:

/^#=GS/ {
    id = $2
    # 从第4个字段开始拼接完整的功能描述
    desc = ""
    for(i=4; i<=NF; i++) {
        desc = desc " " $i
    }
    # 去掉描述开头多余的空格
    sub(/^ /, "", desc)
    print "ID: " id
    print "Description: " desc
    print "---"
}

针对你提供的示例内容,输出结果会是:

ID: WP_002855993.1/5-168
Description: [subseq from] MULTISPECIES: AAC(3) family N-acetyltransferase [Campylobacter]
---
ID: WP_002856586.1/5-166
Description: [subseq from] MULTISPECIES: aminoglycoside N(3)-acetyltransferase [Campylobacter]
---

如果你的需求是提取其他类型的字符串,可以补充说明具体要提取的内容,我再调整命令~

内容的提问来源于stack exchange,提问作者D.Parker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:41:23