shell批量将高斯输出(.out/.log)文件转化成输入文件

        将高斯输出文件坐标转化成下一次计算的输入文件时,如果只是少数几个输出文件,手动提取无操作焦虑,但是如果是几十个,甚至是上万个,手动显然不现实,下面的Shell脚本可以批量实现一键提取(注:这是在前人智慧基础上的改进版,解决了原版本需要每次手动输入原子数的问题):

        使用方法:

        1.以下代码复制进后缀为.sh的文件(如xx.sh),传入linux下目标文件所在文件夹

        2.cd进所在文件夹,chmod 777 xx.sh

        3.在终端输入:./xx.sh &

        等待执行完毕后产生一个out2gjf文件夹,新生成输入文件在该文件夹内

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

for i in *.out    #如果输出文件后缀是.log,请将*.out修改成*.log
do
fil=`echo ${i}|sed "s/out/gjf/g"`    #对每一个输出文件的后缀out变成gjf,并赋值回file
n=`more ${i}|cat -n|grep Number|tail -n 1|cut -c 1-8`    #读取输出文件,通过cat -n对每一行编号,再通过grep抓取出关键词Number所在的所有行,最后通过tail和cut提取最后一行所在的行号
((n=n+2))    #第一个坐标出现在第n+2那一行,赋值回n
atoms_num=`more ${i}|cat -n|grep Rotational|tail -n 1|cut -c 1-8`-1-n	#读取分子原子数

#以下小段可以自定义下一步计算的使用的方法关键词等信息
echo "%nprocshared=4
#b3lyp/3-21g opt" > ${dir}/${fil}
echo "" >> ${dir}/${fil}
echo ${i} >> ${dir}/${fil}
echo "" >> ${dir}/${fil}
echo "0 1" >> ${dir}/${fil}

#以下小段提取坐标
ido=0
while((${ido} < $atoms_num))
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}
echo "" >> ${dir}/${fil}

done

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值