基本コマンド編:項目の結合(xtjoin)

基本コマンド編最後は、xtjoinによる他のデータ項目の結合について解説する。


ここでは、小分類の数量金額合計に、小分類コードに対応する「小分類名」項目を別のファイル(jicfs4.xt)から結合する。
先に作成したスクリプトxtcut.shを再利用することにする。xtcut.shをxtjoin.shの名前でコピーしておこう。

新しくコピーされたファイル"xtjoin.sh"を編集する。
まずは小分類別数量金額合計のデータを作成する。xtcut 、xtaggコマンドを利用すればよい。
次に小分類コードに対する名前のファイルが、入力ファイルと同じディレクトリに「jicfs4.xt」という名前で入っている。その中身は下図に示されるように、小分類のコードと小分類の名前の対応表になっている。

$ more /mnt/h00/tutorial/jicfs4.xt
<?xml version="1.0" encoding="euc-jp"?>
<xmltbl version="1.1">
<header>
<title>GICFS小分類マスター</title>
<comment>http://www.dsri-doc.jp/より入手</comment>
<field no="1" name="小分類" sort="1"></field>
<field no="2" name="小分類名" sort="2"></field>
</header>
<body><![CDATA[
1101 調味料
1102 食用油
1103 スプレッド類
1104 乳製品
1105 調理品
1106 スープ
1107 冷凍食品
1108 缶詰
1110 粉類
1111 ホームメーキング材料
1112 麺類
1113 パン・シリアル類
1114 穀物
--More--(7%)

xtjoinコマンドでは、結合されるファイル(-iで指定したファイル)の指定項目(-kオプション)を、結合するファイル(-mで指定したファイル)の指定項目(-Kオプション)につき合わせ、同じ値であれば-fで指定した項目(ここでは小分類名)の値を結合する。本節の例では、「-k 小分類」、「-K 小分類」という指定になる。今回のケースではたまたま両者とも同一名であるが、そのような時は「-K」パラメータを省略してもよい。
そして最後に、出力ファイル名(xtjoin.xt)、およびコメントの変更も忘れずに。
これらの変更を反映させたスクリプトを下図に示しておく。

#!/bin/bash
xtcut -f 小分類,数量,金額 -i /mnt/h00/tutorial/dat.xt |
xtagg -k 小分類 -f 数量,金額 -c sum |
xtjoin -k 小分類 -m /mnt/h00/tutorial/jicfs4.xt -f 小分類名 |
xtheader -l "チュートリアル" -c "xtjoin" -o xtjoin.xt

結果は下図のように、小分類別数量金額合計のデータに、小分類名が結合されているのが確認できるであろう。

$ more xtjoin.xt
<?xml version="1.0" encoding="euc-jp"?>
<xmltbl version="1.1">
<header>
<title>チュートリアル</title>
<comment>xtjoin</comment>
<field no="1" name="小分類" sort="1"></field>
<field no="2" name="数量"></field>
<field no="3" name="金額"></field>
<field no="4" name="小分類名"></field>
</header>
<body><![CDATA[
1101 6247 2388930 調味料
1102 1515 546193 食用油
1103 365 145373 スプレッド類
1104 2173 849791 乳製品
1105 2249 860320 調理品
1106 1277 487220 スープ
1107 2087 913009 冷凍食品
1108 1855 621047 缶詰
1110 2091 844705 粉類
1111 1645 622258 ホームメーキング材料
1112 1831 832578 麺類
--More--(50%)

OnePoint 圧縮ファイルの扱い
MUSASHIでは圧縮ファイルを直接扱うことができる。ただしファイル名を指定した場合は、ファイル名が「.gz」のファイルをgz圧縮のファイルとして扱うというルールがある。「-i」で指定したファイルの末尾が「.gz」であれば入力ファイルを圧縮ファイルと見なして読み込み、また「-o」で指定したファイルの末尾が「.gz」であれば結果を圧縮して書き出す。さらにxtjoinのように入出力以外のファイル(参照ファイル)についても同様のルールが適用される。すなわち、本章の例で言えば、「gicfs4.xt」が圧縮されて「gicfs.xt.gz」という名前であったとすると、圧縮ファイルとして読み込んでくれる。
 またMUSASHIでは入力ファイルの指定を「-i」パラメータでなく、標準入力から読み込むことも可能である。その時、標準入力から読み込まれるデータが圧縮データであるかどうかは、各コマンドが自動判断している。また同様に出力ファイルの指定も「-o」パラメータでなく、標準出力に書き込むことも可能である。ただし、その時、圧縮して書き込みたければ「-z」パラメータを指定しなければならない。
(1.0.4より-zオプションの機能は無効になりました。参考:http://musashi.sourceforge.jp/diff103to104/change.html#z)

練習課題

次のようなデータを作成しよう。スクリプト名及び結果ファイル名は表に示されたものを使おう。

帳票名 スクリプト名 結果ファイル(xt) 結果ファイル(html)
中分類別数量金額合計に中分類名を結合したデータ xtjoin1.sh xtjoin1.xt xtjoin1.html
細分類別数量金額合計に細分類名を結合したデータ xtjoin2.sh xtjoin2.xt xtjoin2.html