计算化学公社

 找回密码 Forget password
 注册 Register
Views: 12896|回复 Reply: 5
打印 Print 上一主题 Last thread 下一主题 Next thread

[Gaussian/gview] 试着写个批量提取Gaussian计算结果的脚本

[复制链接 Copy URL]

37

帖子

0

威望

1594

eV
积分
1631

Level 5 (御坂)

跳转到指定楼层 Go to specific reply
楼主
本帖最后由 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修改----------------------------------





评分 Rate

参与人数
Participants 2
eV +12 收起 理由
Reason
wangxc + 4 好物!
sobereva + 8

查看全部评分 View all ratings

5

帖子

0

威望

9

eV
积分
14

Level 1 能力者

2#
发表于 Post on 2015-11-12 09:27:08 | 只看该作者 Only view this author
赞一个!学习学习!

198

帖子

0

威望

2241

eV
积分
2439

Level 5 (御坂)

3#
发表于 Post on 2016-5-15 14:49:10 | 只看该作者 Only view this author
感谢楼主分享,我尝试了将第一个代码写成bat文件,在dos下运行,
但是提示我“#”不是内部或外部命令,也不是运行程序或批处理文件,此时不应有m
然后我把第一行的#!/bin/bash删除了,继续运行,提示我此时不应有m。
请问这是怎么回事?谢谢楼主!
站在宇宙中心呼唤爱

37

帖子

0

威望

1594

eV
积分
1631

Level 5 (御坂)

4#
 楼主 Author| 发表于 Post on 2016-5-16 16:33:18 | 只看该作者 Only view this author
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
)

69

帖子

0

威望

4297

eV
积分
4366

Level 6 (一方通行)

5#
发表于 Post on 2017-9-8 22:22:58 | 只看该作者 Only view this author
楼主您好,如果想用脚本把输出文件中的能量最低的坐标提取出来,然后弄成.gjf,应该怎么做呢,可不可以给些提示

28

帖子

0

威望

223

eV
积分
251

Level 3 能力者

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



本版积分规则 Credits rule

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2024-11-23 23:20 , Processed in 0.176487 second(s), 22 queries , Gzip On.

快速回复 返回顶部 返回列表 Return to list