ubuntu20.04 awk変数の割り当て

ubuntu20.04 awk変数の割り当て

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%shttp://shellcheck.netそしてそれが知らせる残りの問題を解決してください。

関連情報