(standard_in):语法错误 - 原子坐标

时间:2018-03-28 08:48:33

标签: linux bash shell

亲爱的,

我正在编写一个脚本,用于检查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”。

最后,应将矢量长度与球体的半径进行比较,以检查它是否是球体的一部分并写入一个简单的输出。

在此之后,我在脚本中遇到语法错误,我真的无法弄清楚原因。看起来第一部分适用于文件准备,但是一旦数学开始就出现问题。

0 个答案:

没有答案