从包含句子的变量中减去数字

从包含句子的变量中减去数字

这是来自的扩展问题

https://stackoverflow.com/questions/32081168/reading-a-log-file-with- Different-sequences-using-shell-script

我是壳牌新手。我编写了一个 shell 脚本,其中的代码找到了一个句子,我想从该句子中减去该值。句子如下

FINAL SINGLE POINT ENERGY       -39.022584378179

我想要数字部分, expr substr 给我未知的命令错误,实际上我的数字部分的长度可能会有所不同,所以我想使用 awk ,例如:

awk -F" " '{ print $1 }' $line

你们能帮我吗

这是我的代码

optimized=0
while IFS= read -r line; do
  case $line in
    *"HURRAY"*)
      optimized=1
      continue
      ;;
    "FINAL SINGLE POINT ENERGY      "*)
      [ "$optimized" = 1 ] || continue
      final_energy=`echo $line | awk '{print $NF }'`
      echo "Found optimized final energy: $final_energy"
      ;;
    "final energy")
  esac
done < input-s.out

日志文件是一个包含许多FINAL SINGLE POINT ENERGY“的长文件,并且必须仅读取后面的最后一个hurray

答案1

$ awk '/HURRAY/ { ok = 1 } ok == 1 && /^FINAL SINGLE POINT ENERGY/ { printf("Found optimized final energy: %s\n", $NF) }' input-s.out

我认为这就是你的 shell 脚本想要做的事情。

如果它在某处找到该字符串HURRAY,则会设置ok为 1(您的optimized变量)。如果ok为 1 并且它找到以字符串 开头的行FINAL SINGLE POINT ENERGY,则会显示消息,后跟同一行最后一列中的值。

相关内容