gawkで2進数にしたときの桁数を求めたいんだがどうしたものか

Sat Apr 4 10:21:08 JST 2015 (modified: Tue Sep 19 21:55:56 JST 2017)
views: 2196, 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使うか・・・。

別解、たぶんすぐ見つかると思うので絶賛受付中。

仕事に戻る。

ノート   このエントリーをはてなブックマークに追加 
 

prev:日記(確率ロボティクス復刊等) next:Hadoopのpigを使うときに設定ではまったところメモ

やり散らかし一覧

記事いろいろ