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

如何在保留格式前提下,根据同行另一列值条件替换列内容?

解决PDB固定列宽文件的条件替换问题(保留原格式)

PDB文件采用固定列宽格式,不能用常规的按空格/制表符分割字段的方式处理,否则会破坏原有排版。以下是在Mac OS(Unix架构)下,根据指定列的值条件替换目标列且保留格式的解决方案:

核心思路

直接操作字符串的固定位置,提取目标区域的内容做判断,仅替换指定位置的字符,完全保留原文件的空格布局和列宽。

实现命令

使用Mac自带的BSD awk执行以下命令:

awk '{
    # 提取PDB行中第73-76位的分段标识符(PROA/PROB)
    seg = substr($0, 73, 4)
    # 根据分段标识符替换第22位的链ID字符
    if (seg == "PROA") {
        $0 = substr($0, 1, 21) "A" substr($0, 23)
    } else if (seg == "PROB") {
        $0 = substr($0, 1, 21) "B" substr($0, 23)
    }
    # 输出修改后的完整行
    print
}' example.pdb > example_mod.pdb

命令说明

  • substr($0, pos, len):截取整行内容中从pos位置开始、长度为len的子串(位置从1开始计数)
  • 第73-76位是示例中的分段标识(PROA/PROB),可根据实际PDB格式调整位置
  • 第22位是示例中需要替换的链ID位置(原字符为P),替换为A/B后,前后的空格和内容完全保留
  • 整个操作不改变原行的任何空格布局,仅修改指定位置的单个字符

为什么之前的方法失效

你之前使用的awk命令通过IFS/OFS按制表符分割字段,会将PDB行中的连续空格视为单个分隔符,输出时用制表符替换原有空格,彻底破坏了固定列宽的格式。而直接操作字符串位置的方法完全规避了这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 14:17:48