我有一个制表符分隔的文件,看起来像这样:
foo 0 4
boo 3 2
blah 4 0
flah 1 1
我正在尝试计算每行两列之间的 log2。我的问题是除以零我尝试过的是:
cat file.txt | awk -v OFS='\t' '{print $1, log($3/$2)log(2)}'
当分母为零时,awk会崩溃。我想做的是某种条件语句,当分母等于 0 时,它会打印一个“inf”作为结果。
我真的不知道该怎么做?任何帮助将不胜感激谢谢
我有一个制表符分隔的文件,看起来像这样:
foo 0 4
boo 3 2
blah 4 0
flah 1 1
我正在尝试计算每行两列之间的 log2。我的问题是除以零我尝试过的是:
cat file.txt | awk -v OFS='\t' '{print $1, log($3/$2)log(2)}'
当分母为零时,awk会崩溃。我想做的是某种条件语句,当分母等于 0 时,它会打印一个“inf”作为结果。
我真的不知道该怎么做?任何帮助将不胜感激谢谢
您可以按如下方式实现(通过一些额外的调整):
awk 'BEGIN{OFS="\t"} {if ($2==0) {print $1, "inf"} else {print $1, log($3/$2)log(2)}} file.txt
解释:
if ($2==0) {print $1, "inf"} else {...}
- 首先检查第二个字段 ( $2
) 是否为零。如果是,则打印$1
并inf
继续下一行;否则照常进行。BEGIN{OFS="\t"}
-OFS
在 awk 脚本中设置;主要是偏好的东西。... file.txt
- 当您将它指定为参数时,awk 可以从文件中读取;这节省了 cat 进程的使用。(见UUCA)awk -F'\t' '{print $1,($2 ? log($3/$2)log(2) : "inf")}' file.txt