基本コマンド編:レコードの並べ替え(xtsort)

レコードを並べ換えるコマンドxtsortコマンドの利用法について学習する。


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

新しくコピーされたファイル"xtsort.sh"を編集する。xtagg.shでは、日別数量金額合計が求まっている。そこでxtaggコマンドの後にxtsortコマンドを加え、日付を逆順にソートしてみる。
xtsortコマンドでは、並べ替えたい項目を"-k"オプションで指定する。そして、逆順に並べたければ"%r"を、数値順に並べたければ"%n"を、項目名に続けて指定する(何も指定しなければ、昇順+文字順で並べ替えられる)。複数の項目で並べたいときには、逆順および数値順の指定をそれぞれの項目ごとに指定することができる。この例では日付を降順に並べるので「xtsot -k 日付%r」と指定すればよい。
そして最後に、出力ファイル名(xtsort.xt)、およびコメントの変更も忘れずに。
これらの変更を反映させたスクリプトを下図に示しておく。

#!/bin/bash
xtcut -f 日付,数量,金額 -i /mnt/h00/tutorial/dat.xt |
xtagg -k 日付 -f 数量:数量合計,金額:金額合計 -c sum |
xtsort -k 日付%r |
xtheader -l "チュートリアル" -c "xtsort" -o xtsort.xt

結果は、下図のように、日付項目が降順で並べ変わっていることが確認できるであろう。

$ more xtcount.xt
<?xml version="1.0" encoding="euc-jp"?>
<xmltbl version="1.1">
<header>
<title>チュートリアル</title>
<comment>xtsort</comment>
<field no="1" name="日付" sort="1" reverse="1"></field>
<field no="2" name="数量合計"></field>
<field no="3" name="金額合計"></field>
</header>
<body><![CDATA[
20021231 139 55483
20021230 65 25010
20021229 121 46492
20021228 146 50974
20021227 148 59424
20021226 88 34793
20021225 132 45721
20021224 132 53431
20021223 178 69113
20021222 175 66270
20021221 115 41608
20021220 90 34318
--More--(7%)

ここで並べ替えに関するいくつかの例を示しておく。
金額昇順:金額項目は数値として並べ替えたいので、「-k 金額%n」と指定する。
金額降順:さらに降順指定を加え、「-k 金額%nr」と指定する(rとnはどちらが先でも問題ない)。
日付降順&金額昇順:このように複数項目を指定した場合の意味は、「まず日付を降順で並べ換え、もし日付で同じ値があった場合は金額で昇順に並べ換える」ということである。指定は、「-k 日付%r,金額%n」となる。これらの指定の動作確認は練習課題の中で行ってもらいたい。

練習課題

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

帳票名 スクリプト名 結果ファイル(xt) 結果ファイル(html)
日別数量金額合計を金額合計昇順で並べ替える xtsort1.sh xtsort1.xt xtsort1.html
日別数量金額合計を金額合計降順で並べ替える xtsort2.sh xtsort2.xt xtsort2.html
日別小分類別数量金額合計を日付昇順&数量合計昇順で並べ替える xtsort3.sh xtsort3.xt xtsort3.html
日別小分類別数量金額合計を日付降順&数量合計降順で並べ替える xtsort4.sh xtsort4.xt xtsort4.html