2011-10-26 46 views
8

私はAwkで2つのフィールド(時には除数がゼロかもしれない)を分割しようとしています。Awk、ゼロで除算しようとしていません

私はこれが働くだろうと思った:awk -F, '{if ($6 != 0) print $3/$6}' <some file>

しかし、それは、私は条件がフィールド6がゼロの場合は分割しないように世話をした「場合」と思っていてもfatal: division by zero attemptedとチョーク。

私は何を見落としていますか?

+2

「awk -F、 '$ 6!= 0 {print $ 3/$ 6}' ...」と書くこともできます。それは問題を解決することはできませんが、それはより慣用的なawkです。 – onemasse

答えて

15

"bar"!= $ 6が文字列の場合、比較は失敗しますが、除算の数値に変換するとゼロに評価されます。代わりに

 
if($6 + 0 != 0) 

を使用してください。

+2

Yikes! awkはテキスト文字列には素晴らしいのですが、数学のために設計されたものではないことをよく思い出してください。 –

+0

ありがとう、私はAwkについてもそれを忘れていた。 –

+1

これは言語や実装のバグです。 'bar'のように数字のように見えない文字列が、数値オペランドとは反対の' + 'のような演算子ではゼロのように振る舞う場合、 '='のような関係演算子を使用した数値と比較するとゼロのように動作するはずです。この**は、Awkのパラダイムにとどまっている間、完全にうまくいく可能性があります。 – Kaz

関連する問題