awk gsub 搞乱格式

awk gsub messing up format

我正在尝试使用 bash 脚本替换 pdb 中满足特定条件的 2 列,其中 运行 包含一个 awk 文件(bash 脚本具有另一个目的,awk文件是为了代码分离)。当我 运行 没有设置 OFS 的脚本时,带有字符串替换的行没有足够的间距。当我设置 OFS="\t" 时,间距太大(相对于未更改的行)。为什么只执行一个字符串操作就改变了整行的格式?

这里是myScript.sh

(some unrelated grep stuff)
awk -f ./myAwkScript.awk 4HKD.pdb.bk > 4HKD.pdb.bk.gen

这里是myAwkScript.awk

#!/usr/bin/awk 

BEGIN { OFS="\t" }
{ if( =="HETATM" && =="MSE" ) { 
        gsub( /MSE/, "MET",  ); 
        gsub( /HETATM/, "ATOM",  );
  }
  print;
}

这是输出的样子,因此您可以看到它对制表符的作用

ATOM    127  OE1 GLN A 449      -4.056  11.297 119.695  1.00 20.83           O  
ATOM    128  NE2 GLN A 449      -1.948  10.876 120.359  1.00 14.98           N  
ATOM    129     N       MET     A       450     -4.523  16.830  119.280 1.00    14.88   N
ATOM    130     CA      MET     A       450     -5.537  17.804  118.911 1.00    15.65   C
ATOM    137  N   ARG A 451      -3.902  19.530 119.337  1.00 15.80           N  
ATOM    138  CA  ARG A 451      -3.228  20.800 119.118  1.00 15.54           C  
ATOM    139  C   ARG A 451      -2.430  20.827 117.826  1.00 16.64           C            C

这是不改变 OFS 的样子

ATOM    127  OE1 GLN A 449      -4.056  11.297 119.695  1.00 20.83           O  
ATOM    128  NE2 GLN A 449      -1.948  10.876 120.359  1.00 14.98           N  
ATOM 129 N MET A 450 -4.523 16.830 119.280 1.00 14.88 N
ATOM 130 CA MET A 450 -5.537 17.804 118.911 1.00 15.65 C
ATOM 135 SE MET A 450 -8.866 19.181 121.271 1.00 55.26 SE
ATOM 136 CE MET A 450 -7.749 20.188 122.510 1.00 28.83 C
ATOM    137  N   ARG A 451      -3.902  19.530 119.337  1.00 15.80           N  
ATOM    138  CA  ARG A 451      -3.228  20.800 119.118  1.00 15.54           C  
ATOM    139  C   ARG A 451      -2.430  20.827 117.826  1.00 16.64           C  

保留未修改的行距。如果你在 print 语句之前添加 = 就可以了。此外,由于您正在寻找完全匹配,因此不需要 gsub。顺便说一下,您可以将脚本重写为

BEGIN {
    OFS="\t"
}
=="HETATM" && =="MSE" {
    ="ATOM"        
    ="MET" 
} 
{=}
1