ratio
名前
ratio : 構成比を求める
書式
使い方とオプション
Usage
ratio [key=<key>] val=<val> <file>
Option
-<p> +<n>h --first --last --max --min --auto
説明
引数のファイル又は標準入力のテキストデータの “key=” で指定したフィールドについて、全レコード(行)の合計に占める各フィールドの値の構成比を算出し、その次のフィールドに挿入して出力します。
例(その1)
(元データ:data)店 日付 売数 客数
$ cat data a店 1日目 103 62 b店 1日目 211 113 c店 1日目 81 52 d店 1日目 75 48 e店 1日目 210 140
売数(第3フィールド)の店別構成比を求めて売数の次のフィールドに挿入します。
$ ratio val=3 data | keta a店 1日目 103 15.1 62 b店 1日目 211 31.0 113 c店 1日目 81 11.9 52 d店 1日目 75 11.0 48 e店 1日目 210 30.9 140 ↑ 構成比
例(その2) “key” オプション
“key=” で指定したフィールドをキーフィールドとし、キーフィールドの値が同じレコードの中で構成比を計算して出力します。尚、キーフィールドは予めソートされていることが条件となります。
(元データ:data2)店 日付 売数 客数
$ cat data2 a店 1日目 103 62 a店 2日目 157 94 a店 3日目 62 30 b店 1日目 211 113 b店 2日目 237 121 b店 3日目 150 82 c店 1日目 81 52 c店 2日目 76 49 c店 3日目 38 21 d店 1日目 75 48 d店 2日目 72 42 d店 3日目 34 19 e店 1日目 210 140 e店 2日目 149 91 e店 3日目 120 73
各日(第2フィールド)毎に店別の売数(第3フィールド)の構成比を求めます。
$ msort key=2/1 data2 | ratio key=2 val=3 | keta a店 1日目 103 15.1 62 ---- b店 1日目 211 31.0 113 ↑ c店 1日目 81 11.9 52 1日目の中での構成比 d店 1日目 75 11.0 48 ↓ e店 1日目 210 30.9 140 ---- a店 2日目 157 22.7 94 ---- b店 2日目 237 34.3 121 ↑ c店 2日目 76 11.0 49 2日目の中での構成比 d店 2日目 72 10.4 42 ↓ e店 2日目 149 21.6 91 ---- a店 3日目 62 15.3 30 ---- b店 3日目 150 37.1 82 ↑ c店 3日目 38 9.4 21 3日目の中での構成比 d店 3日目 34 8.4 19 ↓ e店 3日目 120 29.7 73 ---- ↑ 構成比
例(その3) “+h” オプション
“+<n>h” オプションを付けると先頭の<n>レコードを飛ばして、構成比を計算します。先頭行に、既に項目名などのヘッダーが付与されているデータを計算する場合などに使用します。新たに増える構成比のフィールドのヘッダーは “@” となります。
(元データ:data3)
$ cat data3 店 日付 売数 客数 ← 項目名のヘッダーがある。 a店 1日目 103 62 b店 1日目 211 113 c店 1日目 81 52 d店 1日目 75 48 e店 1日目 210 140
先頭行を飛ばして売数(第3フィールド)の店別構成比を求めて売数の次のフィールドに挿入します。
$ ratio +h val=3 data3 | keta 店 日付 売数 @ 客数 ← 追加フィールドは "@" a店 1日目 103 15.1 62 b店 1日目 211 31.0 113 c店 1日目 81 11.9 52 d店 1日目 75 11.0 48 e店 1日目 210 30.9 140 ↑ 構成比
- 例(その4) "-
" オプション -<数値> で構成比の小数点以下の精度を指定できます。売数(第3フィールド)の店別構成比を小数点3桁まで求めます。
$ ratio -3 val=3 data | keta a店 1日目 103 15.147 62 b店 1日目 211 31.029 113 c店 1日目 81 11.912 52 d店 1日目 75 11.029 48 e店 1日目 210 30.882 140
例(その5) 補正オプション
丸めによって構成比の合計が 100.0 にならない場合があります。この場合に、差分を特定のレコードに加えて合計を 100.0 にします。差分を加えるレコードは以下の通りです。
--first 先頭レコード --last 最終レコード --max 最大値レコード --min 最小値レコード --auto 最大値レコード(差分が正)または最小値レコード(差分が負) $ ratio --first val=3 data | keta a店 1日目 103 15.2 62 ← 補正レコード b店 1日目 211 31.0 113 c店 1日目 81 11.9 52 d店 1日目 75 11.0 48 e店 1日目 210 30.9 140 $ ratio --last val=3 data | keta a店 1日目 103 15.1 62 b店 1日目 211 31.0 113 c店 1日目 81 11.9 52 d店 1日目 75 11.0 48 e店 1日目 210 31.0 140 ← 補正レコード $ ratio --max val=3 data | keta a店 1日目 103 15.1 62 b店 1日目 211 31.1 113 ← 補正レコード c店 1日目 81 11.9 52 d店 1日目 75 11.0 48 e店 1日目 210 30.9 140 $ ratio --min val=3 data | keta a店 1日目 103 15.1 62 b店 1日目 211 31.0 113 c店 1日目 81 11.9 52 d店 1日目 75 11.1 48 ← 補正レコード e店 1日目 210 30.9 140 $ ratio --auto val=3 data | keta a店 1日目 103 15.1 62 b店 1日目 211 31.1 113 ← 補正レコード c店 1日目 81 11.9 52 d店 1日目 75 11.0 48 e店 1日目 210 30.9 140
備考
旧書式は ratio [ref=<ref>] key=<key> <file> です。
しばらくの間、旧書式もサポートされます。
関連項目
sisu
Version and Edition
Version : Tue Jun 18 19:00:37 JST 2019
Edition : 1
© 2021 Universal Shell Programming Laboratory site