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

如何在现有PDB文件中插入指定列并保持格式一致

如何在旧版PDB文件的ATOM行中插入字母"A"并保持格式规范

需求:在旧版Protein Data Bank(PDB)文件的ATOM记录中,在残基名字段后插入字母"A",严格遵循80列的格式规范,首6列记录名保持左对齐,其余字段的分隔格式完全不变。

输入示例

ATOM      1  N   LYS     1      27.426  26.010  24.339  1.00  0.00           N  
ATOM      2  H1  LYS     1      27.291  25.736  24.387  1.00  0.00           H  
ATOM      3  H2  LYS     1      27.286  25.739  24.374  1.00  0.00           H  

期望输出

ATOM      1  N   LYS A   1      27.426  26.010  24.339  1.00  0.00           N  
ATOM      2  H1  LYS A   1      27.291  25.736  24.387  1.00  0.00           H  
ATOM      3  H2  LYS A   1      27.286  25.739  24.374  1.00  0.00           H   

解决方案:用Awk脚本处理

Awk适合处理固定格式的文本,能精准控制每个字段的位置和宽度,完美匹配旧版PDB的80列规范。

脚本代码

/^ATOM/ {
    # 按旧版PDB字段位置提取内容
    record = substr($0, 1, 6)       # 1-6列:记录名(左对齐)
    serial = substr($0, 7, 5)       # 7-11列:原子序号
    name = substr($0, 13, 3)        # 13-15列:原子名
    altLoc = substr($0, 17, 1)      # 17列:替代位置标识
    resName = substr($0, 18, 3)     # 18-20列:残基名
    chainID = "A"                   # 要插入的字母A(对应22列链ID位置)
    resSeq = substr($0, 23, 4)      # 23-26列:残基序号
    iCode = substr($0, 27, 1)       # 27列:插入码
    x = substr($0, 31, 8)           # 31-38列:X坐标
    y = substr($0, 39, 8)           # 39-46列:Y坐标
    z = substr($0, 47, 8)           # 47-54列:Z坐标
    occupancy = substr($0, 55, 6)   # 55-60列:占有率
    tempFactor = substr($0, 61, 6)  # 61-66列:温度因子
    segID = substr($0, 73, 4)       # 73-76列:段ID
    element = substr($0, 77, 2)     # 77-78列:元素符号
    charge = substr($0, 79, 2)      # 79-80列:电荷

    # 按PDB格式拼接输出,严格控制字段宽度和对齐
    printf("%-6s%5s %3s%1s%3s %1s%4s%1s    %8s%8s%8s%6s%6s      %4s%2s%2s\n",
           record, serial, name, altLoc, resName, chainID, resSeq, iCode,
           x, y, z, occupancy, tempFactor, segID, element, charge)
}
# 非ATOM行直接原样输出
!/^ATOM/ { print }

使用方法

  1. 将上述脚本保存为add_chainA.awk
  2. 在终端执行命令:
awk -f add_chainA.awk input.pdb > output.pdb

关键说明

  • 严格按照旧版PDB的80列字段定义提取内容,确保每个字段的起始位置和长度完全匹配规范
  • 用printf的格式控制符保证输出格式:比如%-6s让记录名左对齐6列,其他字段按PDB要求的宽度输出
  • 非ATOM行(如HEADER、TER等)直接原样输出,不会破坏文件的其他结构
  • 即使原文件中存在替代位置标识、插入码等非空字段,脚本也能正确保留,不会丢失信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 17:04:59