두 행에 두 개의 숫자를 얻고 싶습니다
awk '/\!/ {E=$5} $1=="PWSCF" {printf"%4d %s %s\n",'$ecut',E,$3}' $name.$ecut.out >> calc-ecut.dat.3
오류 메시지가 나타납니다
awk: cmd. line:1: warning: regexp escape sequence `\! ' is not a known regexp operator
그러면 #의 이 두 문장이 이 기능을 수행할 수 있습니다(var E에 대한 실제 행은 입니다
! total energy = -15.37741390 Ry
).
# E=$(cat $name.$ecut.out|grep "!"|sed 's/^.*\=//g'|sed 's/Ry//g'|sed 's/[[:space:]]//g')
# E=$(awk '$1=="!" {printf $5}' $name.$ecut.out)
awk '$1=="PWSCF" {printf"%4d %s %s\n",'$ecut','$E',$3}' $name.$ecut.out >> calc-ecut.dat
답변1
/\!/
정규식 메타 문자가 아니라 이미 리터럴이기 /!/
때문 이어야 합니다 . !
또한 읽어보세요https://stackoverflow.com/questions/19075671/how-do-i-use-shell-variables-in-an-awk-script이것에는 다른 문제가 있고 입력에 printf 메타 문자(예를 들어)가 포함된 경우 전자가 실패하기 printf $5
때문에 절대로 이 작업을 수행해서는 안 됩니다 . 마지막으로 - 쉘 스크립트를 복사하여 붙여넣으세요.printf "%s", $5
%s
http://shellcheck.net그리고 그것이 알려주는 나머지 문제를 해결하세요.