kasan
名前
kasan : 累計を求める。
書式
使い方とオプション
Usage
kasan [+r] [+<n>h] [key=<key>] val=<val> <file>
Option
+r +<n>h
説明
引数のファイル又は標準入力のテキストデータの指定したフィールド (val=)の値を、各行ごとに加算して指定したフィールドの次のフィールドに挿入します。累計値を求める場合などに使用します。
例(その1)
店別の累計の仕入れ値を算出します。(4フィールド目の値を加算して5フィールド目に挿入します。)
(元データ:data) 店名 日付 売れ数 仕入数
$ cat data a店 1日目 103 62 a店 2日目 157 94 a店 3日目 62 30 a店 4日目 131 84 a店 5日目 189 111 a店 6日目 350 20 a店 7日目 412 301 $ kasan val=4 data | keta a店 1日目 103 62 62 a店 2日目 157 94 156 a店 3日目 62 30 186 a店 4日目 131 84 270 a店 5日目 189 111 381 a店 6日目 350 20 401 a店 7日目 412 301 702 ↑各行の4フィールド目の値の加算値(累計)
例(その2)
あるフィールドの値が変わった場所で加算をリセットする場合は、そのリセットのキーとなるフィールドを “key=” で指定します。
店別の累計仕入数を算出します。(1フィールド目が変わるごとに加算をリセットします)
(元データ:data) 店名 日付 売れ数 仕入数
$ cat data a店 1日目 103 62 a店 2日目 157 94 a店 3日目 62 30 a店 4日目 131 84 b店 1日目 210 113 b店 2日目 237 121 b店 3日目 150 82 b店 4日目 198 105 c店 1日目 81 52 c店 2日目 76 49 c店 3日目 38 21 c店 4日目 81 48 $ kasan key=1 val=4 data | keta a店 1日目 103 62 62 a店 2日目 157 94 156 a店 3日目 62 30 186 a店 4日目 131 84 270 b店 1日目 210 113 113 ← 累計加算をリセット b店 2日目 237 121 234 b店 3日目 150 82 316 b店 4日目 198 105 421 c店 1日目 81 52 52 ← 累計加算をリセット c店 2日目 76 49 101 c店 3日目 38 21 122 c店 4日目 81 48 170
例(その3)
元のデータのフィールドをその加算値と置き換えて出力する場合は “+r” オプションを使用します。
仕入れ数を累計仕入れ数に置き換えます。 (4フィールド目の加算値を4フィールド目に出力します。) (元データ:data) 店名 日付 売れ数 仕入数
$ cat data a店 1日目 103 62 a店 2日目 157 94 a店 3日目 62 30 a店 4日目 131 84 a店 5日目 189 111 a店 6日目 350 20 a店 7日目 412 301 $ kasan +r val=4 data | keta a店 1日目 103 62 a店 2日目 157 156 a店 3日目 62 186 a店 4日目 131 270 a店 5日目 189 381 a店 6日目 350 401 a店 7日目 412 702 ↑加算(累計)値と置き換え
例(その4)
“+<n>h” オプションを付けると先頭の<n>レコードを飛ばして、加算値を計算します。先頭行に、既に項目名などのヘッダーが付与されているデータを計算する場合などに使用します。新たに増える加算値のフィールドのヘッダーは “@” となります。
(元データ:data)
$ cat data 店名 日付 売れ数 仕入数 <- 項目名のヘッダーがある。 a店 1日目 103 62 a店 2日目 157 94 a店 3日目 62 30 a店 4日目 131 84 a店 5日目 189 111 a店 6日目 350 20 a店 7日目 412 301 $ kasan +h val=4 data | keta 店名 日付 売れ数 仕入数 @ <- 追加フィールドは "@" a店 1日目 103 62 62 a店 2日目 157 94 156 a店 3日目 62 30 186 a店 4日目 131 84 270 a店 5日目 189 111 381 a店 6日目 350 20 401 a店 7日目 412 301 702 $ kasan +r +h val=4 data | keta 店名 日付 売れ数 @ <- "仕入数" が "@" に置き換わる a店 1日目 103 62 a店 2日目 157 156 a店 3日目 62 186 a店 4日目 131 270 a店 5日目 189 381 a店 6日目 350 401 a店 7日目 412 702
例(その5)
小数点のあるデータを加算する場合、それまでの行にある最大小数桁数に合わせて出力します。
$ cat data A 1 A 1.2 A 1.23 B 2 B 2.34 B 3 $ kasan key=1 val=2 data A 1 1 A 1.2 2.2 A 1.23 3.43 B 2 2 B 2.34 4.34 B 3 7.34
例(その6)
val=<pos> で指定できるのは、数値、範囲(/)、列挙(@)、NF NF-<n> です。
$ kasan val=1 data $ kasan val=2/4 data <-- 第2〜第4フィールドの各フィールドを加算し、 加算値をそれぞれのフィールドの直後に挿入します。 $ kasan val=2@4 data <-- 第2フィールドと第4フィールドの各フィールドを加算し、加算値をそれぞれのフィールドの直後に挿入します。 $ kasan val=NF data <-- NF も指定できます。 $ kasan val=NF-2 data $ cat data A 1 2 A 3 4 A 5 6 $ kasan val=2/3 data A 1 1 2 2 A 3 4 4 6 A 5 9 6 12
備考
旧書式は kasan [ref=<ref>] key=<key> <file> です。
しばらくの間、旧書式もサポートされます。
Version and Edition
Version : Tue Jun 18 19:00:37 JST 2019
Edition : 1
© 2021 Universal Shell Programming Laboratory site