我想用LinuxAWK计算距离
第一个场分为原子和原子 我想使用linux awk计算ATOM-ATM距离 $7平均X轴我想用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
&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