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

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

新規登録して質問してみよう
ただいま回答率
85.50%
シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

シェル

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

Q&A

解決済

3回答

509閲覧

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

EzrealTrueshot

総合スコア388

シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

シェル

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

0グッド

1クリップ

投稿2018/05/18 06:39

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

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

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

投稿2018/05/18 06:48

Zuishin

総合スコア28656

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2018/05/18 07:00

なぜ高評価……
EzrealTrueshot

2018/05/18 07:08

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

2018/05/18 07:13

PowerShell でいいのですか。 では cat hoge.txt|%{"$($_)`t$([math]::Log($_, 2))"}
EzrealTrueshot

2018/05/18 07:33

うは、完璧です。 ありがとうございます! そう・・・Linuxのbashでやりたかったんです; そうだった・・・すみません。 PowerShellも便利ですね。
guest

0

ベストアンサー

bash

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

で出来ると思います

投稿2018/05/18 08:15

baileycetech

総合スコア30

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

baileycetech

2018/05/18 08:20

これだと割り切れないときに小数が表示されたので、logの計算をintで囲って cat hoge.txt | awk '{print $1 "\t" int(log($1)/log(2))}' とした方がいいでしょう
EzrealTrueshot

2018/05/18 08:46

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

0

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

bash

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


8

という結果が出ますね。

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

投稿2018/05/18 08:01

編集2018/05/18 08:20
tacsheaven

総合スコア13703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tacsheaven

2018/05/18 08:26

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

2018/05/18 08:37

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問