加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Gaussian批量处理脚本

(2012-04-29 16:38:01)
标签:

杂谈

分类: Gaussian
把当前目录下所有的gjf 文件用g03 计算
修改gjf 的开头
out文件的能量提取出来,存储到get_energy.log 中,同时生成以能量值为文件名的out文件,便于排序筛选
out文件的最后一个坐标做成gjf 文件,并赋予新的关键词

#!/bin/bash
for  inf  in *.gjf
do
outf=`echo ${inf}|tr"gjf" "out"`
g03   ${inf}   ${outf}
done

该文件可以把当前目录下所有的gjf文件用g03 计算,文件名后缀自动改为out


解析
#!/bin/bash
shell 脚本中,以#开头的行是注释,但在文件最开始的以#! 开头的行指定解析这个脚本所用的程序。此处是bash,还可以是csh,python, tcl等若干。
for inf in *.gjf
do
… …
Done
循环,变量为inf,变量取值为当前目录下的所有*.gjf 文件。

outf=`echo ${inf}|tr"gjf" "out"`
${inf}: shell中变量取值时候需要在前面加$, 当变量名为多个字符时候最好用{}
echo ${inf}: 显示inf 的值,此处在每次循环时候为某一个*.gjf 的文件名
echo ${inf}|tr "gjf""out" : inf 替换为out,为同windows 下的g03兼容,用out做后缀
outf=`echo ${inf}|tr "gjf""out"` :outf 赋值

g03 < ${inf} >${outf}
g03 计算,从inf 输入,outf 输出



#!/bin/bash
dir=ckout
mkdir ${dir}

for i in *.gjf
do
echo "#b3lyp/6-31g opt" >> ${dir}/${i}
echo "" >> ${dir}/${i}
echo "${i}" >> ${dir}/${i}
echo "" >> ${dir}/${i}
echo "0 1" >> ${dir}/${i}

sed '1,5d' ${i} >> ${dir}/${i}
echo "" >> ${dir}/${i}
done

此脚本可以批量修改gjf 的开头,输出文件在一个新的文件夹中,文件名不变。

解析
dir=ckout
mkdir ${dir}
创建一个叫ckout 的目录,用于存放新生成的文件。

echo "#b3lyp/6-31g opt" > ${dir}/${i}
echo "" >> ${dir}/${i}
echo "${i}" >> ${dir}/${i}
echo "" >> ${dir}/${i}
echo "0 1" >> ${dir}/${i}
gjf 文件的开头部分,可以根据需要修改。
echo"" >> ${dir}/${i}:写入一个空行


sed '1,5d' ${i} >> ${dir}/${i}
把旧的gjf 文件的坐标部分写入新文件,
'1,5d' 删除(d) 文件的1-5行,可以根据需要修改。

echo "" >> ${dir}/${i}
在文件末尾写入新的空行


#!/bin/bash
dir=get_energy
mkdir ${dir}

for i in *.out
do
en=`more ${i} | grep 'Energy'| tail -n 1 | cut -c 13-20`
cp -- ${i} ${dir}/${en}_${i}
echo "${i} ${en}" >> get_energy.log
done



此脚本可以把out文件的能量提取出来,存储到get_energy.log 中,同时生成以能量值为文件名的out文件,便于排序筛选。

解析
en=`more ${i} | grep 'Energy'| tail -n 1 | cut -c 13-20`
获取能量值。
grep'Energy': 对不同的文件,能量的表达不同,am1”Energy”,hf E(RHF),可以根据实际选择。
Tail –n 1: 对于opt 任务,此处可以选择最后一个能量值
cut -c 13-20:截取能量值,13-20个字符,未必就是这么多,可以通过试用得到。注意前面不要有空格和减号。

cp ${i} ${dir}/${en}_${i}
复制文件到新的目录,并命名为
能量_原文件名

echo "${i} ${en}" >> get_energy.log
统计能量到新的文件。


out2gjf.sh


#!/bin/bash
dir=out2gjf
mkdir ${dir}

for i in *.out
do
fil=`echo ${i}|tr "out" "gjf"`
n=`more ${i}|cat -n|grep Number|tail -n 1|cut -c 1-8`
((n=n+2))
echo "#hf/3-21g opt" > ${dir}/${fil}
echo "" >> ${dir}/${fil}
echo ${i} >> ${dir}/${fil}
echo "" >> ${dir}/${fil}
echo "0 1" >> ${dir}/${fil}

ido=0
while((${ido} < 30))
do 

((m=n+ido))


more -- ${i} |head -n${m}|tail -n 1|cut -c 14-99 >> ${dir}/${fil}


((ido=ido+1))

done
echo "" >> ${dir}/${fil}

done

此脚本可以把out文件的最后一个坐标做成gjf 文件,并赋予新的关键词。

解析


fil=`echo ${i}|tr "out" "gjf"`
给变量fil 赋值,输入文件的后缀名改变为gjf
n=`more ${i}|cat -n|grep Number|tail -n 1|cut -c 1-8`
寻找最后一个坐标所在的位置,n为行号。

ido=0
while((${ido} < 30))
do 

((m=n+ido))


more -- ${i} |head-n ${m}|tail -n 1|cut -c 14-99 >> ${dir}/${fil}


((ido=ido+1))

done

把分子坐标写入新的gjf 文件
这里30 为分子的原子数,使用时根据体系原子数修改。

0

阅读 收藏 喜欢 打印举报/Report
后一篇:find
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有