计算化学公社

 找回密码 Forget password
 注册 Register

[脚本] 批量自动提取cp2k能量计算结果中的Total Energy

查看数: 1622 | 评论数: 3 | 收藏 Add to favorites 6
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2024-5-14 20:28

正文摘要:

本帖最后由 stishovite 于 2024-5-20 08:07 编辑 手动提取能量计算结果是个大工程,于是编了下面这个自动提取最终能量值的脚本(见附件): @echo off setlocal enabledelayedexpansion set "output_file= ...

回复 Reply

stishovite 发表于 Post on 2026-1-29 15:09:46
Uus/pMeC6H4-/キ 发表于 2026-1-26 18:24
楼主看起来是打算把CP2K计算结果下载到Windows再用bat脚本提取结果的,而你这个是在Linux里面跑的shell命 ...

谢谢大神的优化方案
Uus/pMeC6H4-/キ 发表于 Post on 2026-1-26 18:24:22
112233112233 发表于 2026-1-26 16:57
是不是来一个for循环更方便
for i in {01..20}; do echo -n "image_${i}: "; grep "Total FORCE_EVAL" ene ...

楼主看起来是打算把CP2K计算结果下载到Windows再用bat脚本提取结果的,而你这个是在Linux里面跑的shell命令,其实都用了for循环的逻辑,循环时文件名怎么用变量确定得看具体情形。

另外,awk 里面 $NF 代表的是一行内的总field数而不是某个field的内容。循环每个文件时不需要 grep | tail | awk 这么多重的 pipe ,对于匹配文本不涉及跨行、只需要文件末尾最后一个结果的情况,grep | tail 的逻辑可以用反向 cat 即 tac 代替:
  1. tac energy_${i}.out | awk '/ENERGY| Total FORCE_EVAL ( QS ) energy/ { print $9; exit }'
复制代码
112233112233 发表于 Post on 2026-1-26 16:57:00
是不是来一个for循环更方便
for i in {01..20}; do echo -n "image_${i}: "; grep "Total FORCE_EVAL" energy_${i}.out | tail -n 1 | awk '{print $NF}'; done

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

GMT+8, 2026-2-16 20:36 , Processed in 0.576251 second(s), 31 queries , Gzip On.

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