Gaussian批量处理脚本
(2012-04-29 16:38:01)
标签:
杂谈 |
分类: Gaussian |
1 把当前目录下所有的gjf 文件用g03 计算
2 修改gjf 的开头
3 把out文件的能量提取出来,存储到get_energy.log 中,同时生成以能量值为文件名的out文件,便于排序筛选
4 把out文件的最后一个坐标做成gjf 文件,并赋予新的关键词
2
3
4
#!/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 输出
for
do
outf=`echo ${inf}|tr"gjf" "out"`
g03
done
该文件可以把当前目录下所有的gjf文件用g03
解析
#!/bin/bash
在shell
for inf in *.gjf
do
… …
Done
循环,变量为inf,变量取值为当前目录下的所有*.gjf
outf=`echo ${inf}|tr"gjf" "out"`
${inf}: shell中变量取值时候需要在前面加$,
echo ${inf}:
echo ${inf}|tr "gjf""out" :
outf=`echo ${inf}|tr "gjf""out"` :给outf
g03 < ${inf} >${outf}
用g03
#!/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行,5 可以根据需要修改。
echo "" >> ${dir}/${i}
在文件末尾写入新的空行
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'
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
统计能量到新的文件。
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
解析
en=`more ${i} | grep 'Energy'| tail -n 1 | cut -c 13-20`
获取能量值。
grep'Energy':
Tail –n 1:
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 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 |
前一篇:Gaussian计算溶剂化能
后一篇:find