基本コマンド編:レコード選択2(xtselstr)

レコードの選択でよく利用されるコマンドにxtselstrコマンドがある。これはxtselコマンドを利用しても実現可能である。しかし、xtselstrでは、条件の指定を限定することによって、よりシンプルに記述でき、かつxtselコマンドに比べて高速である。


ここでは、先に作成したスクリプトxtcut.shを再利用することにする。xtselstr.shという名前でコピーしておこう。

新しくコピーされたファイル"xtselstr.sh"を編集する。
xtselstrでは、"-f"に一つの項目名を指定し(複数項目も指定可能であるが複雑になるのでここでは省略)、"-v"に選択条件となる文字列を複数指定する。xtselstrは指定した項目の値と、指定した文字列リストを比較し、項目の値が文字列リストに含まれていれば、その行を選択する。
そこでまずは、xtcutが出力するデータに対して、日付が2002年01月の20日、22日、24日の3日分のデータを選択することを考えると次のようになる。
「xtselstr -f 日付 -v 20020120,20020122,20020124」文字列リストでは、文字列をカンマで区切って指定する。
このxtselstrコマンドを追加したスクリプトは以下のようになる(そして最後に、出力ファイル名(xtselstr.xt)、およびコメントの変更も忘れずに)。

#!/bin/bash
xtcut -f 日付,数量,金額 -i /mnt/h00/tutorial/dat.xt |
xtselstr -f 日付 -v 20020120,20020122,20020124 |
xtheader -l "チュートリアル" -c "xtselstr" -o xtselstr.xt

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

スクリプトの編集が終れば保存して、実行する。結果データを確認すると指定した3日分のデータが選択されていることを確認できるであろう。

xtselstrでは、内部的に文字列リストをハッシュリストに入れて処理を行っている。そのため、文字列の順序は、処理速度に全く影響はない。また文字列が多くなっても(例えば100文字列)さほど処理速度に影響はない。

OnePoint 多機能なレコード選択コマンド
前章のxtselや本章のxtselstrなどのレコード選択のコマンドには、このチュートリアルで紹介した以外にも、様々な選択条件を記述できる。それらの中でも特に重要な機能がキー項目選択である。これは、キー項目を指定することによって、「キー項目が同じ複数行について、○○という条件に一致する行を一行でも含んでいれば、複数行全てを選ぶ」といった選択が可能となる。これらの機能についてはチュートリアルの上級コマンド編で紹介している。

練習課題

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

帳票名 スクリプト名 結果ファイル(xt) 結果ファイル(html)
メーカーが0001,0002,0004のいずれかであるデータのメーカー別数量金額合計 xtselstr1.sh xtselstr1.xt xtselstr1.html
小分類が1101,1111,1116,1401,1403,1406のいずれかであるデータの小分類別数量金額合計 xtselstr2.sh xtselstr2.xt xtselstr2.html
金額が99,199,299のいずれかであるデータの金額別数量金額合計 xtselstr3.sh xtselstr3.xt xtselstr3.html