Ubuntu

ubuntu20.04 awk 變數賦值

  • March 18, 2022

我想在兩行中得到兩個數字

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並修復它告訴您的剩餘問題。

引用自:https://unix.stackexchange.com/questions/695895