初級コマンド編 レコード集計(xtagg)

ここではレコードの集計を行う。先に作成したスクリプトxtcut.shを再利用することにする。
まずFDで、xtcut.shにカーソルを合わせ、"Ctrl"を押しながら"c"を押すと、新し名前で、ファイルをコピーできる。新しい名前は"xtagg.sh"としておこう(下図参照)。

新しくコピーされたファイル"xtagg.sh"を編集する。xtcutで日付、数量、金額を抜き出しているが、その次に、日別に数量と金額を合計する処理を行う。
集計にはxtaggマンドを利用する。xtaggでは"-k"でどの項目を単位に集計するかを指定し(そのような項目のことをキー項目と呼ぶことにする)、"-f"で実際に集計する項目を指定する。そして"-c"で集計の方法を指定する。
ここでは合計なので"-c sum"と指定する(そして最後に、出力ファイル名(xtagg.xt)、およびコメントの変更も忘れずに)。
xtaggを挿入したスクリプトを下図に示しておく。

#/bin/bash
#===============================================================
# MUSASHI bash script
#===============================================================

#---- タイトル
title="チュートリアル"

#---- コメント
comment="xtagg"

#---- 各種変数(適宜修正すること)
inPath="/mnt/h00/prm/tutorial"

#---------------------------------------------------------------
# コマンド
#---------------------------------------------------------------
xtcut -f 日付,数量,金額 -i $inPath/dat.xt.gz |
xtagg -k 日付 -f 数量,金額 -c sum |
xtheader -l "$title" -c "$comment" -o xtagg.xt
#===============================================================

ここで指定した三行の意味は次の通りである。
xtcutで「日付」、「数量」、「金額」の項目を選択し、その結果をパイプラインで次のxtaggコマンドに送る。xtaggコマンドでは、日付を単位に、数量、金額を合計する。そしてその結果データは再びパイプラインによって次のxtheaderコマンドに送られる。xtheaderコマンドは、タイトルとコメントを変更し、その結果を"xtagg.xt"というファイルに書き込む。

スクリプトの編集が終れば保存して、実行する。結果データを確認すると下図のように、日別に数量と金額が合計されているはずである。

<?xml version="1.0" encoding="euc-jp"?>
<xmltbl version="1.00">
<header>
<title>
チュートリアル
</title>
<comment>
xtagg
</comment>
<field no="1">
<name>日付</name>
<sort priority="1">
</sort>
</field>
<field no="2">
<name>数量</name>
</field>
<field no="3">
<name>金額</name>
</field>
</header>
<body><![CDATA[
19960105 330 170023
19960106 376 202936
19960107 345 186710
19960108 365 192866
19960109 515 241954
19960110 487 213515
19960111 464 220741
19960112 642 315335
19960113 632 286111
19960114 325 170098
19960115 404 207313
19960116 626 322327
19960117 536 268251
19960118 502 248289
19960119 542 235548
19960120 576 250142
19960121 456 212493
19960122 375 175588
19960123 590 268325
19960124 524 215801
19960125 743 330867
19960126 643 276340
19960127 699 312099
19960128 419 231647
19960129 503 232898
19960130 562 260900
19960131 595 351001
]]></body>
</xmltbl>

さて、次に出力されたデータの項目名「数量」、「金額」を「合計数量」、「合計金額」に変更してみよう。
項目名の変更はxtheaderでも可能であるが、数量、金額以外の項目名も指定する必要があるので、ここではxtaggコマンドで変更する方法を示しておく。
項目の変更は"-f"パラメータの中で行う。項目名に続けて":"(コロン)を入れ、続いて新しい項目名を指定する。
新しい項目名を反映させたスクリプトは下図のようになる。

#/bin/bash
#===============================================================
# MUSASHI bash script
#===============================================================

#---- タイトル
title="チュートリアル"

#---- コメント
comment="xtagg"

#---- 各種変数(適宜修正すること)
inPath="/mnt/h00/prm/tutorial"

#---------------------------------------------------------------
# コマンド
#---------------------------------------------------------------
xtcut -f 日付,数量,金額 -i $inPath/dat.xt.gz |
xtagg -k 日付 -f 数量:合計数量,金額:合計金額 -c sum |
xtheader -l "$title" -c "$comment" -o xtagg.xt
#===============================================================

実行結果が下図のように、ヘッダーの項目名が変更されていることを確認しておこう。

<?xml version="1.0" encoding="euc-jp"?>
<xmltbl version="1.00">
<header>
<title>
チュートリアル
</title>
<comment>
xtagg
</comment>
<field no="1">
<name>日付</name>
<sort priority="1">
</sort>
</field>
<field no="2">
<name>合計数量</name>
</field>
<field no="3">
<name>合計金額</name>
</field>
</header>
  :
  :

xtaggコマンドでは、合計の他に、平均、最大値、最小値を求めることができる。これらの機能は各自練習課題で確認してもらいたい。

OnePoint <sort>タグについて
xtaggを実行した結果データのヘッダーの日付項目に<sort>のタグがついているのがわかる。これは、xtaggコマンドから出力されるデータが日付項目で並べ替えられていることを意味する。
MUSASHIが提供するコマンドには、入力データが並べ換わっていると処理効率が高くなるものが多い。この<sort>タグはそのような処理効率の目的で用いられている。しかしながら、ユーザはこの<sort>タグを意識しなければならないことはまずないであろう。

xtaggと同じ動きをするコマンドにxtstatisticsがある。このコマンドを使えば、合計や平均以外の分散や標準偏差などの基本統計量を求めることができる。利用方法はxtaggと全く同じなので、興味のある人は試してみよう。

練習課題

次のようなデータを作成しよう。