我想用LinuxAWK计算距离

我想用LinuxAWK计算距离,awk,distance,Awk,Distance,第一个场分为原子和原子 我想使用linux awk计算ATOM-ATM距离 $7平均X轴 &8平均Y轴 &9平均Z轴 所以,公式是 ATOM 2422 N ARG A 310 -59.634 4.259 27.712 1.00 32.40 N ATOM 2423 CA ARG A 310 -58.934 5.351 28.359 1.00 33.78 C ATOM 2424 C ARG A

第一个场分为原子和原子

我想使用linux awk计算ATOM-ATM距离

$7平均X轴
&8平均Y轴
&9平均Z轴

所以,公式是

ATOM   2422  N   ARG A 310     -59.634   4.259  27.712  1.00 32.40           N  
ATOM   2423  CA  ARG A 310     -58.934   5.351  28.359  1.00 33.78           C  
ATOM   2424  C   ARG A 310     -59.159   5.313  29.887  1.00 40.42           C  
ATOM   2425  O   ARG A 310     -58.196   5.447  30.643  1.00 40.70           O  
ATOM   2426  CB  ARG A 310     -59.416   6.670  27.751  1.00 35.39           C  
ATOM   2427  CG  ARG A 310     -58.382   7.778  27.766  1.00 49.75           C  
ATOM   2428  CD  ARG A 310     -58.554   8.636  28.995  1.00 60.92           C  
ATOM   2429  NE  ARG A 310     -58.346  10.052  28.716  1.00 61.42           N  
ATOM   2430  CZ  ARG A 310     -59.309  10.894  28.361  1.00 64.62           C  
ATOM   2431  NH1 ARG A 310     -59.030  12.166  28.131  1.00 35.32           N1+  
ATOM   2432  NH2 ARG A 310     -60.561  10.467  28.230  1.00 51.26           N  
ATOM   2433  N   LYS A 311     -60.418   5.094  30.331  1.00 38.09           N  
ATOM   2434  CA  LYS A 311     -60.756   4.998  31.756  1.00 67.00           C  
ATOM   2435  C   LYS A 311     -60.629   3.565  32.296  1.00 99.40           C  
ATOM   2436  O   LYS A 311     -59.667   2.860  31.988  1.00 63.62           O  
ATOM   2437  CB  LYS A 311     -62.145   5.600  32.060  1.00 69.31           C  
ATOM   2438  CG  LYS A 311     -63.334   4.867  31.431  1.00 80.65           C  
ATOM   2439  CD  LYS A 311     -64.623   5.046  32.243  1.00 89.57           C  
ATOM   2440  CE  LYS A 311     -65.435   6.263  31.854  1.00100.01           C  
HETATM 4916  O   HOH A 401     -45.174  26.882  28.206  1.00 28.08           O  
HETATM 4917  O   HOH A 402     -45.312 -14.800  21.087  1.00 36.55           O  
HETATM 4918  O   HOH A 403     -44.489  19.577  27.744  1.00 32.34           O  
HETATM 4919  O   HOH A 404     -58.563 -18.339   2.320  1.00 15.21           O  
HETATM 4920  O   HOH A 405     -47.481 -13.457 -13.069  1.00 28.79           O  
HETATM 4921  O   HOH A 406     -70.032  -3.662  15.474  1.00 37.10           O  
HETATM 4922  O   HOH A 407     -47.170  20.057   7.101  1.00 28.32           O  
HETATM 4923  O   HOH A 408     -64.134 -14.419  -2.882  1.00 21.58           O  
HETATM 4924  O   HOH A 409     -71.311  -1.590  14.158  1.00 27.64           O
就是 我如何计算所有原子数

我的目标结果类型是

= sqrt((X2-X1)^2+(Y2-Y1)^2+(Z2-Z1)^2)
请教我 所有原子-HETATM距离(*我不需要原子-原子或HETATM-HETATM)

使用awk


我认为你们都是好人

以下假设所有
HETATM
行位于
ATOM
行之后:

ATOM 2422 - HETATM 4916 : 26.85397112                              
 ATOM 2422 - HETATM 4917            
 ATOM 2422 - HETATM 4918            
 ATOM 2422 - HETATM 4919          
 ATOM 2422 - HETATM 4920        
 ATOM 2422 - HETATM 4921          
 ATOM 2422 - HETATM 4922          
 ATOM 2422 - HETATM 4923           
 ATOM 2422 - HETATM 4924               
 ATOM 2423 - HETATM 4916           
 ATOM 2423 - HETATM 4917             
 ATOM 2423 - HETATM 4918                  
 ATOM 2423 - HETATM 4919          
 ATOM 2423 - HETATM 4920               
 ATOM 2423 - HETATM 4921                  
 ATOM 2423 - HETATM 4922                    
 ATOM 2423 - HETATM 4923                  
 ATOM 2423 - HETATM 4924                    
.        
.               
.              
.                
.                  
 ATOM 2440 - HETATM 4924           
或以更可读的格式:

awk '$1=="ATOM"{x[$2]=$7;y[$2]=$8;z[$2]=$9}$1=="HETATM"{for(i in x){print "ATOM " i " - HETATM " $2 " : " sqrt((x[i]-$7)^2+(y[i]-$8)^2+(z[i]-$9)^2)}}' file

不,StackOverflow不是免费的编码服务。你需要显示一些代码。另外,如果你似乎理解列数,那么为什么不将你的Q转换成
awk
代码,比如
val=sqrt((prev7-$7)^2+(prev8-$8)^2+(prev9-$9)^2)
。对于早期测试,只有一节
BEGIN{prev7=-59.634;prev8=4.259;prev9=27.712}
只输入一行数据。同时,通过在的“教程”学习,你将有很长的路要走,以解决你的问题。祝你好运
awk ' $1 == "ATOM" { 
          x[$2] = $7 
          y[$2] = $8 
          z[$2]=$9
      }
      $1 == "HETATM" { 
          for (i in x) {
              print "ATOM " i " - HETATM " $2 " : " \
                   sqrt((x[i]-$7)^2+(y[i]-$8)^2+(z[i]-$9)^2)
          }
      }' file