我想用linux awk进行距离计算

时间:2016-09-24 15:21:43

标签: awk distance

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

第一个字段分为ATOM和HETATM。

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

$ 7表示X轴
& 8表示Y轴
& 9表示Z轴

所以,公式是

= sqrt((X2-X1)^2+(Y2-Y1)^2+(Z2-Z1)^2)
是的 我如何计算所有ATOM-HETATM

我的目的结果类型是

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           

请教我 所有ATOM - HETATM距离(*我不需要ATOM-ATOM或HETATM-HETATM)

使用awk

我认为你们都是善良善良的人!

1 个答案:

答案 0 :(得分:0)

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

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

或以更易读的格式:

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