我想在两行中获取两个数字
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 $5
,printf "%s", $5
因为如果/当输入包含 printf 元字符(例如 )时,前者会失败%s
。最后 - 将您的 shell 脚本复制/粘贴到http://shellcheck.net并解决它告诉您的剩余问题。