我的典型输入
900 mgdg molecules in water t= 600000.00000 step= 400000000
177255
10SOL OW16116 1.061 22.319 11.775
10SOL HW116117 1.055 22.235 11.820
10SOL HW216118 1.039 22.299 11.684
11SOL OW16119 5.139 22.001 12.004
11SOL HW116120 5.153 21.907 12.014
11SOL HW216121 5.098 22.029 12.086
12SOL OW16122 0.276 21.154 1.574
12SOL HW116123 0.191 21.136 1.535
12SOL HW216124 0.331 21.081 1.546
13SOL OW16125 5.557 5.920 7.573
13SOL HW116126 5.631 5.980 7.565
13SOL HW216127 5.581 5.861 7.645
14SOL OW16128 4.326 5.682 7.553
14SOL HW116129 4.231 5.675 7.562
14SOL HW216130 4.352 5.598 7.514
15SOL OW16131 4.067 1.679 1.120
15SOL HW116132 4.022 1.619 1.060
15SOL HW216133 4.146 1.632 1.146
16SOL OW16134 3.419 6.063 5.346
16SOL HW116135 3.369 6.065 5.427
16SOL HW216136 3.487 5.997 5.360
17SOL OW16137 5.588 17.086 1.044
17SOL HW116138 5.607 17.063 1.135
17SOL HW216139 5.588 17.003 0.997
18SOL OW16140 2.583 1.538 0.854
18SOL HW116141 2.555 1.594 0.781
18SOL HW216142 2.640 1.473 0.813
19SOL OW16143 5.027 21.387 5.795
19SOL HW116144 4.959 21.399 5.861
19SOL HW216145 5.071 21.472 5.790
20SOL OW16146 2.035 14.487 10.380
20SOL HW116147 2.116 14.534 10.358
20SOL HW216148 1.977 14.554 10.414
21SOL OW16149 0.525 22.084 5.174
21SOL HW116150 0.615 22.054 5.168
21SOL HW216151 0.520 22.125 5.260
22SOL OW16152 2.687 3.909 4.936
22SOL HW116153 2.629 3.867 4.999
22SOL HW216154 2.706 3.995 4.974
23SOL OW16155 4.065 13.279 11.813
23SOL HW116156 3.996 13.250 11.874
23SOL HW216157 4.060 13.374 11.816
我的剧本
awk 'BEGIN {
while (getline < "eq2_1.gro") {
if ($1 ~ /SOL/ && ($NF < 3.977 || $NF > 7.947 || $(NF-1) < 12.741 || $(NF-1) > 22.240))
name[$1]=$1}
}
{
if ($1 != name[$1])
print
}
END {
if (NR==2) {print NR-2}}' eq2_1.gro | tee eq3_1.gro
在此脚本中,我删除了适当坐标之间的水分子(SOL)。在此脚本中,您可以看到,如果分子中只有一个原子(一个水分子中有3个原子,这就是为什么您可以看到3次例如10SOL)的坐标,那么整个分子将被删除。您可以在第二行中看到-原子总数(每个原子=每行)。在删除其中一些分子后,数字会减少,但是我不知道如何在第二行中打印出来。例如,我希望在第二行中输入119763,而不是177255。(NR-2,因为前两行是有关系统(不是原子)的信息)。
看一下这个:
BEGIN {ln=1}
!($1 ~ /SOL/ && ($NF < 3.977 || $NF > 7.947 || $(NF-1) < 12.741 || $(NF-1) > 22.240)) {
toprint[ln]=$0 #All lines that should be printed will be here
total=total+1 #The total number of lines to be printed
}
{ln=ln+1;}
END {
print toprint[1] #Prints top line of original file
print total-2 #Number of resulting lines - 2 (number of atoms)
for (i=3;i<=NR;i++){
if (toprint[i]!=0) print(toprint[i]) #Prints atoms lines
}
}
以下输出将从您提供的文件中返回:
900 mgdg molecules in water t= 600000.00000 step= 400000000
6
19SOL OW16143 5.027 21.387 5.795
19SOL HW116144 4.959 21.399 5.861
19SOL HW216145 5.071 21.472 5.790
21SOL OW16149 0.525 22.084 5.174
21SOL HW116150 0.615 22.054 5.168
21SOL HW216151 0.520 22.125 5.260
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句