我有一个制表符分隔文件,如下所示:
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”作为结果。
我真的不确定该怎么办? 任何帮助,将不胜感激 感谢
答案 0 :(得分:2)
您可以按如下方式实现(通过一些额外的调整):
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"}
- 在awk脚本中设置OFS
;主要是偏好。... file.txt
- 当您将文件指定为参数时,awk可以读取文件;这节省了猫进程的使用。 (见UUCA)答案 1 :(得分:1)
awk -F'\t' '{print $1,($2 ? log($3/$2)log(2) : "inf")}' file.txt