这是来自的扩展问题
我是壳牌新手。我编写了一个 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
,则会显示消息,后跟同一行最后一列中的值。