Ubuntu
ubuntu20.04 awk 變數賦值
我想在兩行中得到兩個數字
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
/\!/
應該只是/!/
不是!
正則表達式元字元,它已經是字面的。另請閱讀https://stackoverflow.com/questions/19075671/how-do-i-use-shell-variables-in-an-awk-script因為您在這方面還有其他問題,永遠不要這樣做,printf $5
總是printf "%s", $5
如果/當輸入包含 printf 元字元(如%s
. 最後 - 將您的 shell 腳本複制/粘貼到http://shellcheck.net並修復它告訴您的剩餘問題。