我有大量純文本文件包含笛卡爾xyz座標的化學結構。樣品可以看起來像這樣:使用sed或awk進行xyz座標操作
B -1.38372433 0.56274955 2.22204795
B 0.01637488 1.69210489 1.81167819
B 0.29103422 -0.35499374 0.15388510
B 1.14485163 0.19631678 1.74992009
Fe -0.92583118 1.01775624 0.27450973
S -0.35374797 -1.05624221 1.74656393
C -1.87367299 1.66919492 -1.27526252
O -2.42173866 2.04584255 -2.17123145
H -2.54747585 0.75818308 2.22742141
H 0.62677160 -0.81072498 -0.88156036
H 0.38495881 2.74424131 2.19841880
H 2.25808628 0.09159351 1.37282254
在這種情況下,每個H原子鍵合到距離爲1.18埃的B原子。我應該做的是依次改變每個BH頂點的P頂點。 使用bash,我想通過對所遇到的第一個B原子的座標立即處理所有文本文件,並將其用作球體的原點,並在1.18埃的半徑範圍內搜索鍵合的氫原子,用它的座標刪除這個H原子,然後把B變成一個P原子。
一個預期的上述樣品的輸出將是類似的東西:
P -1.38372433 0.56274955 2.22204795
B 0.01637488 1.69210489 1.81167819
B 0.29103422 -0.35499374 0.15388510
B 1.14485163 0.19631678 1.74992009
Fe -0.92583118 1.01775624 0.27450973
S -0.35374797 -1.05624221 1.74656393
C -1.87367299 1.66919492 -1.27526252
O -2.42173866 2.04584255 -2.17123145
H 0.62677160 -0.81072498 -0.88156036
H 0.38495881 2.74424131 2.19841880
H 2.25808628 0.09159351 1.37282254
我已經做了類似的東西而回,但以1.2埃的距離H原子的這是添加XYZ座標來自現有的B原子。我當時使用的是:
for i in *.inp; do awk '/^B/{ print; if (++count == 1) printf("%-10.8f %-14.8f %-14.8f %s\n", "H", $2+1.2, $3+1.2, $4+1.2); next } { print }' $i > temp/`basename $i`--H.inp; done
但是,我仍然沒有成功地提出類似的東西來解決我目前的問題。
任何幫助,非常感謝提前 感謝
有什麼期望的輸出給定的輸入? – choroba
@choroba:謝謝你的回覆。我編輯了這個問題來給出操作的預期輸出。 – nytrook