2016-09-24 35 views
-3
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進行距離計算

我使用Linux AWK

$ 7要計算ATOM-HETATM距離意味着X軸
& 8平均Y軸
& 9意味着Z軸

所以,公式是

= sqrt((X2-X1)^2+(Y2-Y1)^2+(Z2-Z1)^2) 

是 如何計算所有原子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距離(*我不需要原子 - 原子或HETATM-HETATM)使用

AWK

我認爲你們都是好人,好人!

+2

沒有,StackOverflow的是不是一個自由的編碼服務。你需要顯示一些代碼。同時也減少了你的Q可2-3行的數據好像你們懂得列數,那麼爲什麼你的。q沒有轉化爲'喜歡awk'代碼'VAL =開方((prev7- $ 7)^ 2 +(prev8- $ 8)^ 2 +(prev9- $ 9)^ 2)'。並且對於早期測試,有一段'BEGIN {prev7 = -59.634; prev8 = 4.259; prev9 = 27.712}'只能輸入1行數據。也可以通過http://grymoire.com/Unix/Awk.html上的「教程」工作,並且您將很快解決您的問題。祝你好運。 – shellter

回答

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