使用shell脚本读取具有不同序列的日志文件

时间:2015-08-18 19:36:03

标签: linux string shell

我是shell脚本的入门者,我想问你一个关于从日志文件中读取数据的问题。该文件非常长,包含很少的计算收敛步骤。

  

第1步

     

...

     

融合

     

最终能量:1000000

     

第2步

     

...

     

融合

     

最终能量:10000

     

...

     

结构优化

     

最终能量:100000

我需要做的是首先找到结构是否最终被优化,如果是这样,读取最终能量和其他一些数据。在mathematica中,我可以找到结构优化的位置并从中搜索壳中可能存在的相同内容吗? 我是首发请列出我需要使用的所有命令

2 个答案:

答案 0 :(得分:2)

这可能类似于以下内容:

optimized=0
while IFS= read -r line; do
  case $line in
    "structure optimized")
      optimized=1
      continue
      ;;
    "final energy")
      [ "$optimized" = 1 ] || continue
      echo "Found final energy after structure optimized"
      ;;
  esac
done <input.log

如果您将final energy放入示例文件中,那么您的意思是:

final energy: 10000

...然后您可以将相关条款更改为:

"final energy: "*)
  [ "$optimized" = 1 ] || continue
  final_energy=${line#*:}
  echo "Found optimized final energy: $final_energy"
  ;;

...但是如果没有详细而准确的说明,那么如何确切地知道你的意思呢?

答案 1 :(得分:1)

在awk版本中

awk '{if($0=="structure optimized")i=1;if(($0~/final energy/) && (i==1)){print "Found optimized "$0;i=0}}' filename