使用变量在 awk 中除法

Division in awk using variables

我正在尝试执行类似于以下内容的操作:

 sd=0.206887
 mean=0.0195143
 awk '{print -$mean/$sd}' ABC.txt

但是我得到一个错误:

awk: (FILENAME=ABC.txt FNR=1) fatal: division by zero attempted

想知道在这种情况下使用变量的正确方法,TIA

尝试

awk "{print $2-$mean/$sd}" ABC.txt

Shell 双引号允许替换,$</code> 中转义,以便它传递给 Awk 而不是由 shell 解释。</p> <p>直接插值是一种将变量传递给 Awk 的棘手方法。一种不那么棘手的方法是使用 Awk 的 <code>-v 选项将变量定义为 Awk 变量:

awk -v foo=123 -v bar=str 'BEGIN { print foo, bar }'

另一种最透明的方法是使用环境变量:

envvar=hey awk 'BEGIN { print ENVIRON["envvar"] }'

这更透明的原因是 -v 的参数被 Awk 解释为 Awk 语法。更准确地说,作为字符串文字内部的语法:

$ echo 'foo\nbar'
foo\nbar

$ awk -v contains_newline='foo\nbar' 'BEGIN { print contains_newline }'
foo
bar

$ no_newline='foo\nbar' awk 'BEGIN { print ENVIRON["no_newline"] }'
foo\nbar

使用-v标志:

 awk -v sd=0.206887 -v mean=0.0195143 '{print -mean/sd}' ABC.txt

类型安全:

awk -v sd=0.206887 -v mean=0.0195143 '{print (+0)-(mean+0)/(sd+0)}' ABC.txt

来自docs

-v var=val

--assign var=val

Set the variable var to the value val before execution of the program begins.