テキスト処理
計算と数値
bc・expr・factor・numfmt などで、小数の計算・進数の変換・単位付きの数値の整形を行う。
整数の計算だけなら、シェルの $(( )) で足ります(→ シェルスクリプト)。小数や大きな数は bc を使います。
bc電卓
コマンドラインで使える電卓です。小数の計算や、進数の変換ができます。
$ 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古い形式の計算と文字列処理
古くからある計算・文字列処理のコマンドです。
$ expr 7 \* 6 # * はエスケープが必要
$ expr length "hello" # 5
$ expr substr "abcdef" 2 3 # bcd新しく書くスクリプトでは $(( )) や ${#var} を使う方が簡単です。
printf で進数を変換する
$ 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進 → 11numfmt数値を読みやすくする
1048576 を 1.0M にするなど、数値を読みやすい形に変換します。
$ 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素因数分解
数を素因数分解します。
$ factor 360
360: 2 2 2 3 3 5seq と組み合わせた集計
$ 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 には最初から入っていません。 で入れられます。
長さ・重さ・温度などの単位を変換します。
$ units '5 miles' 'km'
$ units 'tempF(100)' 'tempC'