ここではレコードの集計を行う。先に作成したスクリプト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コマンドでは、合計の他に、平均、最大値、最小値を求めることができる。これらの機能は各自練習課題で確認してもらいたい。
xtaggを実行した結果データのヘッダーの日付項目に<sort>のタグがついているのがわかる。これは、xtaggコマンドから出力されるデータが日付項目で並べ替えられていることを意味する。 MUSASHIが提供するコマンドには、入力データが並べ換わっていると処理効率が高くなるものが多い。この<sort>タグはそのような処理効率の目的で用いられている。しかしながら、ユーザはこの<sort>タグを意識しなければならないことはまずないであろう。 |
xtaggと同じ動きをするコマンドにxtstatisticsがある。このコマンドを使えば、合計や平均以外の分散や標準偏差などの基本統計量を求めることができる。利用方法はxtaggと全く同じなので、興味のある人は試してみよう。
次のようなデータを作成しよう。