gawkで2進数にしたときの桁数を求めたいんだがどうしたものか
Sat Apr 4 10:21:08 JST 2015 (modified: Tue Sep 19 21:55:56 JST 2017)
views: 2304, keywords:コマンド,2進数,awk,助けて,シェル芸 この記事は最終更新日が7年以上前のものです。
「n種類のものを表現するには何ビット必要か?」というのをawk(gawk)で計算したいんですが、素直な方法が思い浮かばず、ちと困ってます。
例えば5種類についてこれを求めようとすると、次のようにlog($1)/log(2)して、この値を切り上げればよいのですが、awkには切り上げの関数がありません。
uedambp:~ ueda$ echo 5 | awk '{print log($1)/log(2)}'
2.32193
んで、思いついたのがこれ。要は小数点のピリオドがあったら切り捨てて1足せと。計算というより文字列処理ですな・・・
uedambp:~ ueda$ echo 5 | awk '{print log($1)/log(2)}' |
awk '/\\./{print int($1)+1}!/\\./{print $1}'
3
uedambp:~ ueda$ echo 4 | awk '{print log($1)/log(2)}' |
awk '/\\./{print int($1)+1}!/\\./{print $1}'
2
しかし、素直ではない・・・。Tukubaiのmarume使うか・・・。
別解、たぶんすぐ見つかると思うので絶賛受付中。
仕事に戻る。