2行に2つの数字を取得したい
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
その後、これらの2つの文はこの機能を実行できます(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そしてそれが知らせる残りの問題を解決してください。