初級コマンド編 レコード選択2(xtselstr)

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

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

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

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

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

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

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

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

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

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

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

練習課題

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