使用变量在 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.
我正在尝试执行类似于以下内容的操作:
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.