이것은 의 확장 질문입니다.
저는 쉘을 처음 사용합니다. 문장을 찾는 코드가 포함된 쉘 스크립트를 작성했으며 해당 문장에서 값을 빼고 싶습니다. 문장은 다음과 같습니다
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 이고 string 으로 시작하는 행을 찾으면 메시지가 표시되고 그 뒤에 같은 행의 마지막 열에 있는 값이 표시됩니다.ok
optimized
ok
FINAL SINGLE POINT ENERGY