読者です 読者をやめる 読者になる 読者になる

ちくわ

ちくわにきゅうりを入れるとうまい

awk の if 評価でハマった話し

Linux

あるスクリプトで意図しない出力結果となり、原因を追っていったら awk 周りだった。

awk の if で数値評価をしていたとき、意図せず評価対象に文字列が紛れ込んでいた。

どうも文字列を数値と比較評価すると true になるらしい。

心情的には成立してほしくなかったなぁ。

検証

通常パターン

$ echo 3 | awk '$1 > 5'

$ ## 3 > 5 で false となり何も出力されない

想定してなかった文字列がきてしまった時

$ echo "hoge" | awk '$1 > 5'

hoge ## hoge > 5 という謎な事すると true になるらしく、出力される

int で変換すればちゃんと評価してくれる

$ echo "hoge" | awk 'int($1) > 1'

$ echo "3" | awk 'int($1) > 1'

3