计算化学公社

标题: 试着写个批量提取Gaussian计算结果的脚本 [打印本页]

作者
Author:
biancheng159    时间: 2015-11-11 22:13
标题: 试着写个批量提取Gaussian计算结果的脚本
本帖最后由 biancheng159 于 2016-1-11 12:55 编辑

有时候,我们需要执行大批量的优化或单点运算,借助Sob老师的一个批量执行gjf计算的脚本我们可以“一键”完成,但是结果提取则颇为费劲。于是我做了如下尝试,纯属抛砖,但是旨在分享观点,学习交流。
1. 如果各模型中原子数一样(假设为36),则用如下脚本可实现。
  1. #!/bin/bash
  2. for m in *.out
  3. do
  4. echo searching ${m} ...
  5. name=${m%.*}
  6. grep -w -B36 'Sum of Mulliken charges' ${m} | tail -n -36 | > ${name}.txt
  7. echo ${m} completed
  8. echo
  9. done
复制代码
由于结果文件中'Sum of Mulliken charges'出现多次(其实俺并未搞清楚其区别),这里提取最后一个。
外延:若想提取单点能、热力学数据,则可分别将'Sum of Mulliken charges'改为'SCF Done', 'Thermochemistry'关键词,同时调整-B36和36为合适数字。

2. 如果各模型中原子数不一样,则要添加一条判断原子数的语句。我试着写了个这
#!/bin/bash
for m in *.out
   do
     echo extracting from ${m} ...
     NATOM=`grep "NAtoms=" ${m} | tail -n 1 | awk '{print $2}' `
     sed -n '/Mulliken charges:/,/Sum of Mulliken charges/p' ${m} | tail -n -$(( $NATOM + 1 )) > ${m%.*}.txt
     sed -i '$d' ${m%.*}.txt
     
   done
echo Job done!
echo
显然不够精炼,有心人可将之精简。
有时Gaussian输出的*.log文件中为“Mulliken atomic charges:”。
无意间搜到ChemiAndy前辈在某坛上发过类似脚本,如有雷同,还请海涵——重在交流嘛。

3. 在win下,可以考虑将如上所得成列的txt文本批量转为excel可读的*.csv文件,如下脚本可行,
  1. <p>@echo off
  2. for /f "delims=" %%a in ('dir /b *.txt') do (
  3. (for /f "usebackq tokens=1-3" %%i in ("%%a") do (
  4.         echo %%i,%%j
  5.     ))>"%%~na.csv"
  6. )</p>
复制代码
其中tokens=1-3的1-3可根据具体情况自定义。
--------------2015.11.15修改----------------------------------






作者
Author:
lsbp010    时间: 2015-11-12 09:27
赞一个!学习学习!
作者
Author:
kevin    时间: 2016-5-15 14:49
感谢楼主分享,我尝试了将第一个代码写成bat文件,在dos下运行,
但是提示我“#”不是内部或外部命令,也不是运行程序或批处理文件,此时不应有m
然后我把第一行的#!/bin/bash删除了,继续运行,提示我此时不应有m。
请问这是怎么回事?谢谢楼主!
作者
Author:
biancheng159    时间: 2016-5-16 16:33
kevin 发表于 2016-5-15 14:49
感谢楼主分享,我尝试了将第一个代码写成bat文件,在dos下运行,
但是提示我“#”不是内部或外部命令,也 ...

bat的格式与shell格式大有不同,bat下脚本类似如下格式(需要sed.exe等):
@echo off
for /f "delims=" %%i in ('dir /b *.log') do (
       sed -n "/^[ ]*1/d;/Mulliken atomic charges:/,/Sum of Mulliken atomic charges/p" %%i > %%~ni.txt
)
作者
Author:
圣人惠    时间: 2017-9-8 22:22
楼主您好,如果想用脚本把输出文件中的能量最低的坐标提取出来,然后弄成.gjf,应该怎么做呢,可不可以给些提示

作者
Author:
yaoshi1206    时间: 2024-9-21 11:07
用了楼主脚本没有提取出能量,在楼主基础上改了以下,直接在终端输出批量提取出来的能量
  1. #!/bin/bash
  2. for m in *.log
  3. do
  4. str1=$(grep 'SCF Done' ${m})
  5. echo ${m} ${str1}
  6. done
复制代码








欢迎光临 计算化学公社 (http://bbs.keinsci.com/) Powered by Discuz! X3.3