亲爱的,
我正在编写一个脚本,用于检查3D空间中的某些点是否是预定义球体的一部分。我有500个输入文件(减少到5个用于调试),包含66605 x / y / z感兴趣的坐标。
问题:我得到像
这样的东西(standard_in)2:语法错误
(standard_in)199993:语法错误
代码:
#!/bin/bash
radius=20 #radius of the inclusion sphere in Angstrom
sphere_x=-50.861 #x coordinate of inclusion sphere Angstrom
sphere_y=-39.123 #y coordinate of inclusion sphere in Angstrom
sphere_z=-60.123 #z coordinate of inclusion sphere in Angstrom
filebase='frame_' #base file name of frames that include waters
nframes=5 #total number of frames/files for analysis
nwaters=66605 #total number of water molecules in a single file/frame
for (( a=1; a<=nframes; a++ ))
do # file loop
echo "Processing frame $a"
echo "Frame $a" >> results.out
grep "O T3P" "$filebase""$a".pdb | grep -o "T3P.*" >> oxygen_t3p_"$a".tmp
awk '{print $3 " " $4 " " $5}' oxygen_t3p_"$a".tmp >> oxcords_t3p_"$a".tmp
paste water_name.txt water_number.txt oxcords_t3p_"$a".tmp >> nice_t3p_ox_"$a".tmp # makes a file "T3P 1337 x.xxx y.yyy z.zzz
for (( b=1; b<=nwaters; b++ ))
do #molecule loop
water_x=$(grep "T3P $b" nice_t3p_ox_"$a".tmp | awk '{print $3}')
water_y=$(grep "T3P $b" nice_t3p_ox_"$a".tmp | awk '{print $4}')
water_z=$(grep "T3P $b" nice_t3p_ox_"$a".tmp | awk '{print $5}')
dist_x=$(echo "$water_x - $sphere_x" | bc -l | tr -d "-")
dist_y=$(echo "$water_y - $sphere_y" | bc -l | tr -d "-")
dist_z=$(echo "$water_z - $sphere_z" | bc -l | tr -d "-")
dist_x_2=$(echo "$dist_x * $dist_x" | bc -l) #squared a²
dist_y_2=$(echo "$dist_y * $dist_y" | bc -l)
dist_z_2=$(echo "$dist_z * $dist_z" | bc -l)
dist_square_tot=$(echo "$dist_x_2 + $dist_y_2 + $dist_z_2" | bc -l) # squares added a² + b² + c²
dist_tot=$(echo "sqrt($dist_square_tot)" | bc -l) # root sqrt(a² + b² + c²)
if (( $(echo "$dist_tot < $radius" | bc -l) )) # distance vector of water to sphere center COMPARED to radius
then
echo "Water $b: P" >> results.out
else
echo "Water $b: S" >> results.out
fi
done
rm *.tmp
done
解释:
输入文件格式如下(条目为1至66605的O T3P和其他原子如H1 T3P以及更多)
HETATM62640 O T3P 1679 42.164 51.750 -74.809 1.00 0.00 O
HETATM62641 H1 T3P 1679 42.052 51.789 -75.759 1.00 0.00 H
HETATM62642 H2 T3P 1679 42.303 50.822 -74.622 1.00 0.00 H
脚本的第一部分提取所有“O T3P”的坐标并生成一个新编号的新文件(输入文件格式使用字符串作为O T3P“string”的标识符,所以我必须创建一个新的数字从1到66605)。这到目前为止工作,我的输出看起来像:(nice_t3p.tmp)
T3P 1679 42.164 51.750 -74.809
所以感兴趣的原子的所有坐标现在都很好地存储并将用于计算。
然后,我计算从T3P点(xa / yb / zc)到球体中心的距离矢量(xd / ye / zf)并计算矢量长度。不要打扰我多步骤,我不熟悉脚本,尤其是“bc”。最后,应将矢量长度与球体的半径进行比较,以检查它是否是球体的一部分并写入一个简单的输出。
在此之后,我在脚本中遇到语法错误,我真的无法弄清楚原因。看起来第一部分适用于文件准备,但是一旦数学开始就出现问题。