awk零输出

时间:2016-02-19 10:22:29

标签: linux bash awk

我有四栏,我想这样做: INUPUT =

429 0   10  0
287 115 89  64
0   629 0   10
542 0   7   0
15  853 0   12
208 587 5   4
435 203 12  0
604 411 27  3
0   232 0   227
471 395 5   5
802 706 15  15
1288    1135    11  23
1063    386 13  2
603 678 7   14
0   760 0   11

awk '{if (($2+$4)/($1+$3)<0.2 || ($1+$3)==0) print $0; else if (($1+$3)/($2+$4)<0.2 || ($2+$4)==0) print $0; else print $0}' INPUT

但我有错误信息:

awk: cmd. line:1: (FILENAME=- FNR=3) fatal: division by zero attempted

即使我添加了条件:

...|| ($1+$3)==0...

有人可以解释一下我做错了吗?

非常感谢你。

PS:print $0仅用于说明。

2 个答案:

答案 0 :(得分:2)

移动&#34;($ 1 + $ 3)== 0&#34;成为if语句的第一个子句。 Awk将依次评估它们。因此,它仍然首先尝试if语句的第一个子句,触发除零尝试。如果第一个条款为真,它甚至不会试图评估第二个条款。所以: -

awk '{if (($1+$3)==0 || ($2+$4)/($1+$3)<0.2) print $0; else if (($1+$3)/($2+$4)<0.2 || ($2+$4)==0) print $0; else print $0}' INPUT

答案 1 :(得分:0)

您已经在条件语句中除以零(列表第九行$ 1 + $ 3 = 0)。这就是错误的来源。您应该更改条件语句中的顺序:首先验证$ 1 + $ 3!= 0然后才使用它来定义下一个条件。