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> |
次のようなデータを作成しよう。