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

如何用Awk或Bash替换第6行起第5列的指定字符串并保留空格

需求与解决方案

需求

将文件中从第6行到末尾的第5列中的大写字母B替换为C,且需完全保留原文件的空格格式。

输入文件内容

ATOM   1939  HG2 PRO A 125      35.681  32.906  38.437  1.00 43.59           H  
ATOM   1940  HG3 PRO A 125      34.593  33.765  37.652  1.00 41.79           H  
ATOM   1941  HD2 PRO A 125      37.364  34.075  37.624  1.00 43.38           H  
ATOM   1942  HD3 PRO A 125      36.333  34.312  36.415  1.00 41.29           H  
TER   
ATOM   1944  N   MET B  11      16.583  29.975  -4.306  1.00 51.32           N  
ATOM   1945  CA  MET B  11      15.542  30.263  -3.327  1.00 39.92           C  
ATOM   1946  C   MET B  11      16.146  30.366  -1.933  1.00 32.50           C  

用户尝试的错误命令

用户尝试了以下awk命令,但存在语法逻辑错误:

awk 'NR == 6 && $ == 5, { sub(" B ", " C ") }'

错误点:

  • 条件写法不符合awk语法,无法正确定位第6行及以后的第5列
  • 缺少打印行的逻辑,处理后的内容不会输出
  • 匹配方式容易误修改其他位置的B,且无法保证只针对第5列操作

正确解决方案

使用以下awk命令可精准修改并保留原空格格式:

awk 'NR>=6 {gsub(/^([^ ]+ +[^ ]+ +[^ ]+ +[^ ]+ +)B( +.*)/, "\\1C\\2")} 1' input.txt

命令解释

  • NR>=6:指定处理第6行及之后的所有行
  • 正则表达式^([^ ]+ +[^ ]+ +[^ ]+ +[^ ]+ +)B( +.*):捕获前4个字段及后续空格,精准定位第5列的B,再捕获B之后的所有内容
  • \\1C\\2:将捕获的前半部分内容、替换后的C、后半部分内容拼接,完全保留原空格布局
  • 最后的1:打印所有行(包括未修改的前5行)

处理后结果

ATOM   1939  HG2 PRO A 125      35.681  32.906  38.437  1.00 43.59           H  
ATOM   1940  HG3 PRO A 125      34.593  33.765  37.652  1.00 41.79           H  
ATOM   1941  HD2 PRO A 125      37.364  34.075  37.624  1.00 43.38           H  
ATOM   1942  HD3 PRO A 125      36.333  34.312  36.415  1.00 41.29           H  
TER   
ATOM   1944  N   MET C  11      16.583  29.975  -4.306  1.00 51.32           N  
ATOM   1945  CA  MET C  11      15.542  30.263  -3.327  1.00 39.92           C  
ATOM   1946  C   MET C  11      16.146  30.366  -1.933  1.00 32.50           C  

内容的提问来源于stack exchange,提问作者Another.Chemist

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 21:36:21