Command line でサクッと計算をキメるなら bc & bc で時間計算もしちゃうぞ

More than 1 year has passed since last update.

こんにちは。 bc 使っていますか? 電卓でやるような簡単な計算をすぐやるには便利ですね。たぶんスマホの電卓アプリを立ち上げるより速いです。

使い方は

$ bc

で起動して、計算式を書いて enter を押せば答が出ます。

3 + 2 [enter]
6

みたいな。

標準入力で計算式を食わせることもできます。

echo '3 + 2' | bc

みたいに。これは良いですね。 bc に食わせる前にいろいろな処理を挟むことができます。うまく使えば bc の機能を拡張することができます。 UNIX 哲学、ですね。

そこで、 bc で時間計算もしてみちゃいましょう。 9:30 から 13:15 までは何時間なのかを計算してみます。

bc に食わせる前に

  • 9:30 -> 9.5
  • 13:15 -> 13.25

みたいな変換をすれば、目的を達成できます。これをするのが次の script です:

timereplace.rb
line = STDIN.gets.strip

ar = line.split(' ')

ar.each do |str|
    if str.include?(':') then
        time_ar = str.split(':')
        hour = time_ar[0].to_i
        min = time_ar[1].to_i

        hours = hour + min / 60.0
        print hours
    else
        print str
    end
    print ' '
end

puts

使い方は

echo '13:15 - 9:30' | ruby timereplace.rb

というふうに標準入力で計算式を食わせてやれば、

13.25 - 9.5

と、 bc で扱える計算式を吐きます。あとはこれを bc に食わせてやれば任務完了です。

echo '13:15 - 9:30' | ruby timereplace.rb | bc

で、 3.75 という答が出てきます。

なお、演算子の前後に space を入れないと正常に動かないので、そこだけ注意してください。