初級コマンド編 レコード単一化(xtuniq)

xtuniqは、レコード選択に似た機能を持つコマンドで、値が重複する行を単一化するコマンドである。

ここでは、先に作成したスクリプトxtcut.shを再利用することにする。FDで、前章でおこなった手順で、xtcut.shをxtuniq.shの名前でコピーしておこう。
新しくコピーされたファイル"xtuniq.sh"を編集する。まず、xtcutで日付だけを抜き出すように変更する。
次に各日付の値が同じ行を単一化するためにxtuniqコマンドを用いる。xtuniqでは"-k"でどの項目の重複行を単一化するかを指定する。ここでは日付を単一化するので「xtuniq -k 日付」となり、この行をxtcutの行の下に挿入する。
そして最後に、出力ファイル名(xtuniq.xt)、およびコメントの変更も忘れずに。
これらの変更を反映させたスクリプトを下図に示しておく。

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

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

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

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

#---------------------------------------------------------------
# コマンド
#---------------------------------------------------------------
xtcut -f 日付 -i $inPath/dat.xt.gz |
xtuniq -k 日付 |
xtheader -l "$title" -c "$comment" -o xtuniq.xt
#===============================================================

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

 スクリプトの編集が終れば保存して、実行する。結果データを確認すると下図のように、日付項目だけが出力され、かつ日付の値が単一化されていることがわかる。下図の結果データのヘッダーを見て分かるように、xtuniqでは、単一化された項目で並べ換わるという保証はない。
 また、例えば、「日付」と「金額」項目を持つデータに対して、「日付」項目のみで単一化をした場合、結果データには「日付」と「金額」の両項目が出力される。しかし、どの行が選ばれるかは保証されていない、すなわち、「金額」項目についてはどの行のデータか出力されるかわからない。

<?xml version="1.0" encoding="euc-jp"?>
<xmltbl version="1.00">
<header>
<title>
チュートリアル
</title>
<comment>
xtuniq
</comment>
<field no="1">
<name>日付</name>
<sort priority="1">
</sort>
</field>
</header>
<body><![CDATA[
19960105
19960106
19960107
19960108
19960109
19960110
19960111
19960112
19960113
19960114
19960115
19960116
19960117
19960118
19960119
19960120
19960121
19960122
19960123
19960124
19960125
19960126
19960127
19960128
19960129
19960130
19960131
]]></body>

練習課題

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