初級コマンド編 レコードの並べ替え(xtsort)

xtsortは、レコードを並べ換えるコマンドである。

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

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

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

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

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

#---------------------------------------------------------------
# コマンド
#---------------------------------------------------------------
xtcut -f 日付,数量,金額 -i $inPath/dat.xt.gz |
xtagg -k 日付 -f 数量:合計数量,金額:合計金額 -c sum |
xtsort -k 日付%r |
xtheader -l "$title" -c "$comment" -o xtsort.xt
#===============================================================

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

<?xml version="1.0" encoding="euc-jp"?>
<xmltbl version="1.00">
<header>
<title>
チュートリアル
</title>
<comment>
xtsort
</comment>
<field no="1">
<name>日付</name>
<sort priority="1">
</sort>
</field>
<field no="2">
<name>合計数量</name>
<sort priority="2">
</sort>
</field>
<field no="3">
<name>合計金額</name>
<sort priority="3">
</sort>
</field>
</header>
<body><![CDATA[
19960131 595 351001
19960130 562 260900
19960129 503 232898
19960128 419 231647
19960127 699 312099
19960126 643 276340
19960125 743 330867
19960124 524 215801
19960123 590 268325
19960122 375 175588
19960121 456 212493
19960120 576 250142
19960119 542 235548
19960118 502 248289
19960117 536 268251
19960116 626 322327
19960115 404 207313
19960114 325 170098
19960113 632 286111
19960112 642 315335
19960111 464 220741
19960110 487 213515
19960109 515 241954
19960108 365 192866
19960107 345 186710
19960106 376 202936
19960105 330 170023
]]></body>
</xmltbl>

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

練習課題

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