awkとgawkの整数値の取扱の違い
記事の更新日:2026/09/11 1.概要 awkをよく利用します。awkで処理に困ったことがあり、gawkに変更しました。awkの中でテキストを数値にint関数で変更をしていたのですが、桁数が大きくなるとint関数を利用しているのですが、浮動小数点に変わっていまいました。これは想定外の動きでした。 処理ではintである必要があったので、対処策を探してgawkに変えることにしました。gawkで当面は問題なく処理できるのですが、gawkの場合も桁数が更に大きくなるとint関数の結果が正確ではありません。浮動小数点には変わらないのですが、微妙に数値が変わります。この内容を記述します。 私の評価は以下の通りです。 (1) awkで桁数が大きな値をint関数で数値計算すると、結果が浮動小数点になります (2) これを改善するには、awkをgawkに変えることで改善できます (3) awkをgawkに入れ替えるとシンボリックリンクが変わるだけです (4) gawkでも更に大きな桁数では課題が残ります 2.詳細 基本的には同じですが、gawkの方が精度が高いようです。 (a) awk ubuntu-22.04.5の標準のawkのversionを確認します awk -W version mawk 1.3.4 20200120 Copyright 2008-2019,2020, Thomas E. Dickey Copyright 1991-1996,2014, Michael D. Brennan random-funcs: srandom/random regex-funcs: internal compiled limits: sprintf buffer 8192 maximum-integer 2147483647 数字の文字列を数値(int)に変換します echo "1234567890" | awk '{ print int($1) }' 1234567890 echo "12345678901" | awk '{ print int($1) }' 1.23457e+10 10桁までは整...