質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.84%

  • シェル

    236questions

    シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

  • シェルスクリプト

    63questions

  • シェル芸

    16questions

【シェル芸】 ワンライナーで実現可能でしょうか?

解決済

回答 3

投稿

  • 評価
  • クリップ 1
  • VIEW 606

EzrealTrueshot

score 372

$ cat hoge.txt

256
512
1024

$ cat hoge.txt | 〜〜〜〜〜 (ここが知りたい)

256   8
512   9
1024  10

【やりたいこと】
数値が1より少なくなるまで2で割っていった回数を元データの横に表示させたい。

  cnt := 0
  n   := 256
  for n > 1 {
    n = n / 2
    cnt += 1
  }
  fmt.Println(cnt)
↓
結果
8

これをbashのワンライナーで実現することは可能でしょうか?
ワンライナー上で計算して、その結果をうまく表示させることが可能な方法があるようでしたらご教示いただけませんでしょうか?

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

+5

シェル芸など必要ありません。
そう、PowerShell 芸ならね!

cat hoge.txt|%{[math]::Log($_, 2)}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/18 16:00

    なぜ高評価……

    キャンセル

  • 2018/05/18 16:08

    windowsで試してみました!
    8
    9
    10
    としか表示されませんでした;

    キャンセル

  • 2018/05/18 16:13

    PowerShell でいいのですか。
    では

    cat hoge.txt|%{"$($_)`t$([math]::Log($_, 2))"}

    キャンセル

  • 2018/05/18 16:33

    うは、完璧です。
    ありがとうございます!

    そう・・・Linuxのbashでやりたかったんです;
    そうだった・・・すみません。

    PowerShellも便利ですね。

    キャンセル

checkベストアンサー

+4

cat hoge.txt | awk '{print $1 "\t" log($1)/log(2)}'


で出来ると思います

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/18 17:20

    これだと割り切れないときに小数が表示されたので、logの計算をintで囲って

    cat hoge.txt | awk '{print $1 "\t" int(log($1)/log(2))}'

    とした方がいいでしょう

    キャンセル

  • 2018/05/18 17:46

    ありがとうございます!
    美しすぎます。

    キャンセル

+1

Linux で、bc をインストールしてもよいならば、

echo "l(256) / l(2)" | bc -l | xargs printf "%.0f"



8

という結果が出ますね。

bc は自然対数(ln)しか対応してなく log2 を直接計算できないため、底の変換公式を利用しています。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/18 17:26

    これだと log(x)/log(2) の結果を四捨五入するから、計算ずれる場合がありますね……なんか他の手があるかな。

    キャンセル

  • 2018/05/18 17:37

    ありがとうございます!
    bcというのがあるんですね。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.84%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    rspecのexampleで不等式の範囲を保証する書き方

    前提・実現したいこと タイトルの通り,rspecのテストで不等式の範囲内に取得した値が入ってるか確かめたいです。 発生している問題・エラーメッセージ 最初の判定で以下のよ

  • 解決済

    JVMのオプション確認方法について

    SleepするJava(ただ3分程度停止するだけのJava)を動かす時に JVMのオプションとして、ヒープ/メタスペースの領域を設定いたしました。 その際にJVMに設定したオプ

  • 解決済

    JFrameでのJPanelの切り替えについて

    前提・実現したいこと (例)Java(UIはJFrame)でゲームを作っているのですが、JPanelの切り替えをJFrameで行おうとしています。 しかし、JPanelの切り替

  • 解決済

    c言語 リスト構造の検索

    アドレス帳の検索機能だけのプログラムを作っています。 作りたいプログラムは、  1,検索したい人の名前を入力する  2,事前に登録された情報の中から部分一致検索する 

  • 解決済

    既存のファイルを複数の指定の行数で分割保存する方法はありますか?

    前提・実現したいこと 膨大なデータ(excelで開けません)を指定の行で分割保存したいです。 その時、例えば、合計10000行のデータを、 1~1000行で1ファイル(1000行)

  • 解決済

    catでこういうことがしたい

    catでこういうことがしたいのですが、どうやればいいでしょうか? → ファイル名→コードタグ→中身→コードタグ を繰り返す ファイルの中身は、それぞれ数字一文字が入っていま

  • 解決済

    rsyncで複数のディレクトリを同期する方法

    rsyncで複数のディレクトリを同期したいのですが、rsyncコマンドを複数行記載しなくても1行のコマンドで複数のディレクトリを同期する記載を出来るのでしょうか? 今下記のように記

  • 解決済

    Pythonであるパッケージのインストールに失敗します。

    前提・実現したいこと Phythonで機械学習の変換システムを作っています。 Pysptkのインストール中に次のエラーメッセージが発生しました。 発生している問題・エラーメ

同じタグがついた質問を見る

  • シェル

    236questions

    シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

  • シェルスクリプト

    63questions

  • シェル芸

    16questions