我有四栏,我想这样做: 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
仅用于说明。
答案 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然后才使用它来定义下一个条件。