2013年4月23日火曜日

マルチソートの方法

sortコマンドを使用してマルチソート(ソート結果を維持しながら複数列をソート)する場合には、-kオプションを使用する。

例えば以下のようなテーブルがあり、

b|3
c|1
b|1
c|3
a|2
a|3

1列目をアルファベットの逆順でソート後、その順序(アルファベットの逆順)を維持したまま2列目を昇順でソートしたい場合、sort -t "|" -k1,1r -k2,2nrを実行すると、以下の通りに所望の結果が得られる。

c|3
c|1
b|3
b|1
a|3
a|2

ここで、各オプションの意味は以下の通りであり、"-k1,1r"にて一列目を逆順でソートし、"-k2,2nr"にて二列目を昇順でソートしている。

(1) -tオプションはテーブルの区切り("|")を指定
(2) nは対象列を数値とみなしてソート
(3) rは逆順(数値列の場合は昇順)でソート

なお、マルチソート対象の列数が3列以上となっている場合でも、sort -t "|" -k1,1r -k2,2nr -k3,3のように、順次"-k"オプションを追加設定することで対応可能。

例えば10列の数値テーブルにおいて、7列目、4列目及び、2列目のみをソート対象とし、なおかつこの順序で降順でマルチソートしたい場合には、sort -t "|" -k7,7n -k4,4n -k2,2nとすれば良い。

0 件のコメント:

コメントを投稿