Software Design 2016年6月号で、num-utilsにある「numsum」を使ってコンソール上で計算するというのがあったので、ちょっと触ってみることにした。
今回は、記事と同様にUbuntuを、バージョンは16.04 LTSを用いることにする。

1.インストール

num-utilsのインストールは簡単で、以下のコマンドでインストールできる。

sudo apt-get install num-utils

なお、Mac OS Xだと、以下のコマンドでインストールできるようだ。

brew install num-utils

CentOSなどで利用するためにソースからインストールする場合は、以下のようにすればよい。

wget http://suso.suso.org/programs/num-utils/downloads/num-utils-0.5.tar.gz
tar xzvf num-utils-0.5
make && make install

これで、num-utilsがインストールできた。

2.実際に使ってみる

num-utilsでは、以下のコマンドが用意されている。

  • average
  • bound
  • interval
  • normalize
  • numgrep
  • numprocess
  • numsum
  • random
  • range
  • round

それぞれのコマンドを簡単に使ってみよう。

average(numaverage)

average(numaverageの場合も)は、その名の通り標準出力などで渡された数字の平均を出すコマンドだ。

blacknon@BS-PUB-UBUNTU-01:~$ cat /tmp/test.txt
1
2
3
2
4
1
54
14
13
542
542
21
23
3
43
54
blacknon@BS-PUB-UBUNTU-01:~$ cat /tmp/test.txt | numaverage
82.625

bound(numbound)

bound(numbound)は、渡された数字の最小値・最大値を求めるコマンドだ。
オプション無しだと最大値を求め、「-l」オプションを付与することで最小値を求めることができる。

blacknon@BS-PUB-UBUNTU-01:~$ cat /tmp/test.txt
1
2
3
2
4
1
54
14
13
542
542
21
23
3
43
54
blacknon@BS-PUB-UBUNTU-01:~$ cat /tmp/test.txt | numbound
542
blacknon@BS-PUB-UBUNTU-01:~$ cat /tmp/test.txt | numbound -l
1

interval(numinterval)

interval(numinterval)コマンドでは、前に渡された数字との差(1,4と渡されたら3)を返すコマンドだ。

blacknon@BS-PUB-UBUNTU-01:~$ echo 1 3 5 | sed 's/ /\n/g'
1
3
5
blacknon@BS-PUB-UBUNTU-01:~$ echo 1 3 5 | sed 's/ /\n/g' | numinterval
2
2
blacknon@BS-PUB-UBUNTU-01:~$ cat /tmp/test.txt
1
2
3
2
4
1
54
14
13
542
542
21
23
3
43
54
blacknon@BS-PUB-UBUNTU-01:~$ cat /tmp/test.txt | numinterval
1
1
-1
2
-3
53
-40
-1
529
0
-521
2
-20
40
11

normalize(numnormalize)

normalize(numnormalize)は、受け取ったすべての数字のうち、その数字が数字をすべて足した合計でどの程度の割合なのかを出してくれる。

blacknon@BS-PUB-UBUNTU-01:~$ echo 2 3 5 | sed 's/ /\n/g' | numnormalize
0.2
0.3
0.5
blacknon@BS-PUB-UBUNTU-01:~$ echo 2 3 5 5 2 3 | sed 's/ /\n/g' | numnormalize
0.1
0.15
0.25
0.25
0.1
0.15
blacknon@BS-PUB-UBUNTU-01:~$ cat /tmp/test.txt | numnormalize
0.00075642965204236
0.00151285930408472
0.00226928895612708
0.00151285930408472
0.00302571860816944
0.00075642965204236
0.0408472012102874
0.010590015128593
0.00983358547655068
0.409984871406959
0.409984871406959
0.0158850226928896
0.0173978819969743
0.00226928895612708
0.0325264750378215
0.0408472012102874

numgrep

numgrepは、まぁそのままで数字をgrepするコマンド。
ただ、普通のgrepと違うのは指定した条件の数字を計算して出力してくれるところだ。

たとえば、numgrepの条件に「/m◯/」と記述してやれば、◯の倍数のみを抽出してくれる。
逆に、「/f◯/」とすれば、計算して◯となる因数を出してくれる。また、「/1..4/」とすれば1から4までの数字のみを抽出させることもできる。

blacknon@BS-PUB-UBUNTU-01:~$ echo {1..1000} | sed 's/ /\n/g' | numgrep /m3/ | head -10
3
6
9
12
15
18
21
24
27
30
blacknon@BS-PUB-UBUNTU-01:~$ echo {1..1000} | sed 's/ /\n/g' | numgrep /m5/ | head -10
5
10
15
20
25
30
35
40
45
50
blacknon@BS-PUB-UBUNTU-01:~$ echo {1..1000} | sed 's/ /\n/g' | numgrep /f1024/ | head -10
1
2
4
8
16
32
64
128
256
512
blacknon@BS-PUB-UBUNTU-01:~$ echo {1..1000} | sed 's/ /\n/g' | numgrep /3..10/
3
4
5
6
7
8
9
10

numprocess

numprocessコマンドは、受けた数字に対し、指定した計算をしてやるコマンドだ。
たとえば、「/+1/」を指定してやることで、受け付けた数字すべてに+1して出力してくれる。

blacknon@BS-PUB-UBUNTU-01:~$ echo {1..10} | sed 's/ /\n/g' | numprocess /+1/
2
3
4
5
6
7
8
9
10
11

計算には四則計算だけではなく、べき乗や円周率を指定して計算をさせたりといったこともできるようだ。

numsum

numsumコマンドは、受けた数字すべてを合計してくれるコマンドだ。

blacknon@BS-PUB-UBUNTU-01:~$ cat /tmp/test.txt
1
2
3
2
4
1
54
14
13
542
542
21
23
3
43
54
blacknon@BS-PUB-UBUNTU-01:~$ cat /tmp/test.txt | numsum
1322
blacknon@BS-PUB-UBUNTU-01:~$ echo {1..10} | sed 's/ /\n/g' | numsum
55

random(numrandom)

random(numrandom)コマンドは、指定した範囲内から数字をランダムで出力してくれるコマンドだ。
指定方法は他のコマンドと同様に「/●..○/」で表す。

blacknon@BS-PUB-UBUNTU-01:~$ numrandom /1..44/
15
blacknon@BS-PUB-UBUNTU-01:~$ numrandom /1..44/
36
blacknon@BS-PUB-UBUNTU-01:~$ numrandom /1..44/
33
blacknon@BS-PUB-UBUNTU-01:~$ numrandom /1..44/
22

range(numrange)

range(numrange)コマンドは、指定した範囲の数字を出力させるコマンドだ。
「/○..●/」で範囲を指定する。「/○..●i△/」とすることで、△で指定した数字の間隔をあけて出力させることができる(なお、iで間隔を指定するのは他のコマンドでも使える)。

blacknon@BS-PUB-UBUNTU-01:~$ numrange /0..10/
0 1 2 3 4 5 6 7 8 9 10
blacknon@BS-PUB-UBUNTU-01:~$ numrange /01..11i2/
1 3 5 7 9 11
blacknon@BS-PUB-UBUNTU-01:~$ numrange /01..15/
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15

round(numround)

round(numround)コマンドは、受けた数字を四捨五入してくれるコマンドだ。
「-c」で切り上げ、「-f」で切り下げることができる。

blacknon@BS-PUB-UBUNTU-01:~$ cat /tmp/test1.txt
0.1243
0.532
1.2411
32.53425
22.33
blacknon@BS-PUB-UBUNTU-01:~$ cat /tmp/test1.txt | numround
0
1
1
33
22
blacknon@BS-PUB-UBUNTU-01:~$ cat /tmp/test1.txt | numround -c
1
1
2
33
23
blacknon@BS-PUB-UBUNTU-01:~$ cat /tmp/test1.txt | numround -f
0
0
1
32
22

num-utilsには以上のコマンドが用意されている。
どれも結構便利な機能を持っているので、使う機会があれば有用に使っていきたい。