ubuntu20.04 awk 变量赋值

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

答案1

/\!/应该只是/!/因为!不是正则表达式元字符,它已经是文字了。另请阅读https://stackoverflow.com/questions/19075671/how-do-i-use-shell-variables-in-an-awk-script因为您在这方面还有其他问题,并且永远不会这样做printf $5printf "%s", $5因为如果/当输入包含 printf 元字符(例如 )时,前者会失败%s。最后 - 将您的 shell 脚本复制/粘贴到http://shellcheck.net并解决它告诉您的剩余问题。

相关内容