Tukubaiオンラインコマンドマニュアル

lcalc(1)

【名前】

lcalc : フィールドの高精度演算(整数18桁+小数18桁)

【書式】

Usage   : lcalc <script> <files>...
Option  : --divzero[=<string>]
          --overflow[=<string>]
          -d
Version : Thu Feb 13 02:26:23 JST 2014

【説明】

引数のファイルまたは標準入力のテキストデータの各フィールドに対して<script>にしたがった演算を行う。<script>では式、フィールド、フィールド範囲を単独またはカンマで区切って複数指定することができる。

式の演算は整数18桁+小数18桁の36桁で行われる。式では定数、NF(入力フィールド数)、NR(入力レコード数)、二項演算子(+、-、*、/、%)、単項演算子(-、$)、丸め関数(round()、age()、sage())、括弧を使うことができる。

$演算子は入力のフィールドを表す。オペランドは整数に切り捨てられる。切り捨てられた結果が1からNFの範囲になければならない。

丸め関数はround()が四捨五入、age()が切り上げ、sage()が切り捨てを行う。第1引数の値を第2引数で指定される桁位置で丸める。第2引数は整数定数のみが許されている。第2引数が0で始まる場合は整数部分の桁位置を、0以外で始まる場合は小数部分の桁位置を示す。たとえばsage(123.456, 01)は120.000になり、sage(123.456, 1)は123.400 になる。

式の出力形式は「整数部.小数部」となる。整数部は必要な桁数(1〜18)、小数部は常に18桁。ただし、演算結果が整数になる場合は小数点および小数部は表示されない。

式でオーバーフローが発生した場合はlcalcの実行が中止される。--overflowオプションを指定した場合は、その式の計算が放棄されオプションで指定された文字列が出力され、lcalcの実行が継続される。文字列の指定を省略した場合はovflw が出力される。

除算および剰余算において右オペランドが0の場合は演算結果が0になる。--divzeroオプションを指定した場合は、その演算を含む式の計算が放棄されオプションで指定された文字列が出力される。文字列の指定を省略した場合はdiv/0が出力される。

フィールドは「$式」の形式で入力のフィールドを表す。式の値は整数に切り捨てられる。切り捨てられた結果が0からNFの範囲になければならない。0の場合は入力行全体となる。$演算子との違いは数値に変換されるか否かとなる。たとえばスクリプトが'$1,($2)'で入力が123.456 123.456の場合、出力は123.456 123.456000000000000000となる。

フィールド範囲は$[式:式]の形式で連続した複数の入力のフィールドを表す。スクリプトの構成要素間には任意個の空白類(改行文字を含む)を置くことができる。#から行末まではコメントになる。コメントは空白を置ける場所に置くことができる。

-dオプションを指定するとファイルを読み込まずスクリプトを直接実行する。この場合$演算子、フィールド、フィールド範囲は使えない。

【例1】

$ cat data
01 埼玉県 91 59 20 76 54.1
01 埼玉県 46 39 8 5 21.2
01 埼玉県 82 0 23 84 10.3
02 東京都 30 50 71 36 30.4
02 東京都 58 71 20 10 6.5
04 神奈川県 92 56 83 96 75.6
$ lcalc '$1, $2, $3 / $4 + $5 * $6, $7' data
01 埼玉県 1521.542372881355932203 54.1
01 埼玉県 41.179487179487179487 21.2
01 埼玉県 1932 10.3
02 東京都 2556.600000000000000000 30.4
02 東京都 200.816901408450704225 6.5
04 神奈川県 7969.642857142857142857 75.6
$ 

【例2】

$ lcalc -d '1.23 * 3.45 / 3'
1.414500000000000000
$ 

【関連項目】

フィールド形式(5)

last modified: 2014-03-02 16:03:02