molファイルからxyz座標(Cartesian座標)を抜き出すtcshスクリプト

ベンゼンのmolファイルのxyz座標部分を抜き出す。
具体的にはbenzene.molファイルの青字部分(Fig.1)を抜き出す。

Fig.1

tcshへシェルを変更。ログインし直し。
$ chsh -s /bin/tcsh

Fig.1の4行目の原子数(黄色)を変数で取得。

$ set string3num = `sed -n 4p benzene.mol | cut -c 1-3`
$ echo ${string3num}
12

文字列を数字に変換。

$ set coordLind = `printf “%d” ${string3num}`
$ echo ${coordLind}
12

原子数${coordLind}に4を足してmolファイル中の座標最終行${coordLineEnd}を定義。

$ @ coordLineEnd = ${coordLind} + 4
$ echo ${coordLineEnd}
16

awkで5行目から座標最終行${coordLineEnd}までを、フィールドをxyz座標順(原子 X Y X)にして抜き出す。

$ awk ‘(NR > 4 && NR <= ‘”${coordLineEnd}”‘ ) {print $4″ “$1” “$2” “$3}’ benzene.mol
C -5.3622 0.6577 -0.1889
C -5.3765 -0.6577 0.0500
C -4.2279 -1.3154 0.2389
C -3.0649 -0.6577 0.1889
C -3.0506 0.6577 -0.0500
C -4.1992 1.3154 -0.2389
H -6.3072 1.1988 -0.3443
H -6.3333 -1.1988 0.0912
H -4.2397 -2.3976 0.4355
H -2.1199 -1.1988 0.3443
H -2.0938 1.1988 -0.0912
H -4.1874 2.3976 -0.4355

以上をつないでmol2xyz.cshへ。

#!/bin/tcsh
set string3num = `sed -n 4p $1 | cut -c 1-3`
set coordLind = `printf “%d” ${string3num}`
@ coordLineEnd = ${coordLind} + 4
awk ‘(NR > 4 && NR <= ‘”${coordLineEnd}”‘ ) {print $4″ “$1” “$2” “$3}’ $1

以下、実行結果。

$ chmod 766 mol2xyz.csh
$ ./mol2xyz.csh benzene.mol
C -5.3622 0.6577 -0.1889
C -5.3765 -0.6577 0.0500
C -4.2279 -1.3154 0.2389
C -3.0649 -0.6577 0.1889
C -3.0506 0.6577 -0.0500
C -4.1992 1.3154 -0.2389
H -6.3072 1.1988 -0.3443
H -6.3333 -1.1988 0.0912
H -4.2397 -2.3976 0.4355
H -2.1199 -1.1988 0.3443
H -2.0938 1.1988 -0.0912
H -4.1874 2.3976 -0.4355