|
本帖最后由 biancheng159 于 2016-1-11 12:55 编辑
有时候,我们需要执行大批量的优化或单点运算,借助Sob老师的一个批量执行gjf计算的脚本我们可以“一键”完成,但是结果提取则颇为费劲。于是我做了如下尝试,纯属抛砖,但是旨在分享观点,学习交流。
1. 如果各模型中原子数一样(假设为36),则用如下脚本可实现。
- #!/bin/bash
- for m in *.out
- do
- echo searching ${m} ...
- name=${m%.*}
- grep -w -B36 'Sum of Mulliken charges' ${m} | tail -n -36 | > ${name}.txt
- echo ${m} completed
- echo
- 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文件,如下脚本可行,
- <p>@echo off
- for /f "delims=" %%a in ('dir /b *.txt') do (
- (for /f "usebackq tokens=1-3" %%i in ("%%a") do (
- echo %%i,%%j
- ))>"%%~na.csv"
- )</p>
复制代码 其中tokens=1-3的1-3可根据具体情况自定义。
--------------2015.11.15修改----------------------------------
|
评分 Rate
-
查看全部评分 View all ratings
|