awk和log2分区

时间:2012-12-03 16:35:35

标签: awk

我有一个制表符分隔文件,如下所示:

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”作为结果。

我真的不确定该怎么办? 任何帮助,将不胜感激 感谢

2 个答案:

答案 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)是否为零。如果是,请打印$1inf然后转到下一行;否则按常规进行。
  • 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