/Linuxコマンド

テキスト処理

計算と数値

bc・expr・factor・numfmt などで、小数の計算・進数の変換・単位付きの数値の整形を行う。

整数の計算だけなら、シェルの $(( )) で足ります(→ シェルスクリプト)。小数や大きな数は bc を使います。

bc電卓

コマンドラインで使える電卓です。小数の計算や、進数の変換ができます。

bash
$ echo "3.5 * 4" | bc               # → 14.0
$ echo "scale=4; 10 / 3" | bc       # 小数点以下4桁 → 3.3333
$ echo "2^64" | bc                  # 大きな整数もそのまま
$ bc -l <<< "s(1)"                  # -l で数学関数(s=sin, c=cos, l=log, e=exp, a=atan, sqrt)
$ echo "obase=2; 255" | bc          # 10進 → 2進 → 11111111
$ echo "ibase=16; FF" | bc          # 16進 → 10進 → 255
$ bc -l                             # 対話的に使う(quit で終了)

expr古い形式の計算と文字列処理

古くからある計算・文字列処理のコマンドです。

bash
$ expr 7 \* 6                       # * はエスケープが必要
$ expr length "hello"               # 5
$ expr substr "abcdef" 2 3          # bcd

新しく書くスクリプトでは $(( )) や ${#var} を使う方が簡単です。

printf で進数を変換する

bash
$ printf '%x\n' 255        # 10進 → 16進 → ff
$ printf '%o\n' 8          # 8進 → 10
$ printf '%d\n' 0xff       # 16進 → 10進 → 255
$ printf '%08.3f\n' 3.14159
$ echo $((2#1011))         # 2進 → 10進 → 11

numfmt数値を読みやすくする

1048576 を 1.0M にするなど、数値を読みやすい形に変換します。

bash
$ numfmt --to=iec 1048576           # → 1.0M
$ numfmt --to=si 1500000            # → 1.5M
$ numfmt --from=iec 2G              # → 2147483648
$ numfmt --grouping 1234567         # → 1,234,567(ロケールによる)
$ ls -l | numfmt --field=5 --to=iec --header   # ls -l のサイズ列を変換

factor素因数分解

数を素因数分解します。

bash
$ factor 360
360: 2 2 2 3 3 5

seq と組み合わせた集計

bash
$ seq 1 100 | paste -sd+ | bc                     # 1〜100 の合計 → 5050
$ awk '{s += $1} END {print s, s/NR}' nums.txt    # 合計と平均
$ sort -n nums.txt | awk '{a[NR]=$1} END {print a[int((NR+1)/2)]}'   # 中央値

units単位の変換

Ubuntu には最初から入っていません。 で入れられます。

長さ・重さ・温度などの単位を変換します。

bash
$ units '5 miles' 'km'
$ units 'tempF(100)' 'tempC'