ratio

提供: Personal Tukubai for Academic
ナビゲーションに移動 検索に移動

名前

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
            ↑ 構成比
      1. 例(その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