これはの拡張質問です。
私はシェルを初めて使用します。文を見つけるためのコードを含むシェルスクリプトを書いたので、その文から値を減算したいと思います。文は次のとおりです
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
私はこれがシェルスクリプトがやろうとしていると思います。
どこかで文字列が見つかると、1(変数)にHURRAY
設定されます。 1で文字列で始まる行が見つかると、メッセージが表示され、その後に同じ行の最後の列の値が表示されます。ok
optimized
ok
FINAL SINGLE POINT ENERGY