SORT

Section: User Commands (1)
Updated: 7 October 2002
Index JM Home Page
 

名前

sort - テキストファイルをソートする  

書式

sort [-cm] [-bdfginruzM] [+POS1[-POS2] [-o OUTFILE] [-t SEPARATOR] [-k POS1[,POS2] [-K POS1[,POS2] [-S SIZE] [-T TEMPDIR] [--reverse] [FILE...]

sort [--help] [--version]  

説明

sort は与えられた各 FILE をソート・マージ・比較する。結果は結合されて標準出力に書き出される。 FILE が一つも与えられないと標準入力から読み込む。また FILE が `-' だった場合には、そのファイルには標準入力が用いられる。

GNU sort は (他の GNU ユーティリティと同じく) 入力ファイルの行の長さや、行あたりのバイト数に制限はない。 また入力ファイルの最後が改行でなければ、 sort は黙って改行を一つ追加する。

エラーが起こると、 sort はステータス 2 で終了する。
       環境変数 TMPDIR が設定されていると、 sort は一時ファイルの置き場所として、デフォルトの /tmp の代わりにそのディレ クトリを用いる。オプション -T TEMPDIR でも一時ファイルを置くディレクトリを指定できる。 オプションは環境変数より優先される。

-k+ オプションでのソートフィールドの場所指定は、 F.C という形式で行う。ここで F は用いるフィールドの番号で、 C は先頭の文字の番号を、そのフィールドの先頭 (+POS の場合) あるいは直前のフィールドの末尾 (-POS の場合) から数えた数字である。 .C が省略された場合は、フィールドの先頭文字になる。 -b オプションが指定されると、フィールド指定の .C の部分は、 そのフィールドの空白でない最初の文字 (+POS の場合) あるいは直前のフィールドの末尾以降の空白でない最初の文字 (-POS の場合) から数えられる。

ソートキーのオプションには、 出力順序オプション (output ordering option) を含めることもでき、 その場合はグローバルな順序オプションはそのフィールドには用いられない。 -b オプションはフィールド指定の +POS-POS の どちらか片方にも、あるいは両方にも、独立に効力を及ぼすことができる。 -b がグローバルなオプションから継承されたものである場合は、 両方に影響する。キーは複数のフィールドにまたがってもかまわない。

 

オプション

 

動作モード

sort のデフォルトの動作はソート動作である。 これは以下のオプションによって変更できる。
-c
与えられたファイルがすでにソートされているかどうかをチェックする。 ソートされていないものがあった場合は、 エラーメッセージを表示してステータス 1 で終了する。 それ以外の場合は正常終了する。
-m
与えられたファイル群をまとめてソートしてマージする。 入力ファイルは事前にそれぞれソートされていなければならない。 マージ動作ではなく、ソート動作を複数ファイルにまとめて行うこともできる。 マージ動作が提供されているのは、 (これでよい場合は) こちらの方が高速だからである。

行のペアは以下のように比較される。 キーフィールドが指定されている場合は、 sort は順序オプションによって コマンドラインから指定された順に、 それぞれの行からの各フィールドを比較する。 比較動作は違いを発見するか全てのフィールドを尽くすまで継続される。

グローバルオプションの `-bdfinrM' のいずれかが指定されており、 キーフィールドが一つも指定されていない場合は、 sort は行全体をグローバルオプションに従って比較する。

最後に、全てのキーが等しい (あるいは順序オプションが まったく指定されなかった) 場合には、 sort は最終手段として、行を LC_COLLATE ではなくマシンの 照合順序にしたがって 1 バイトずつ比較する。 この最終手段の比較は -r オプションに従う。 -s オプション (stable オプション) は、この最終手段比較を無効にし、 全てのフィールドの比較結果が同じだった行の順序を、入力の順序のままにする。 フィールドやグローバルオプションがまったく指定されなかった場合は、 -s オプションは無視される。  

出力順序オプション

以下のオプションは、 sort が行を出力する順序に影響する。これらはグローバルにも、 あるいは特定のキーフィールドの一部としても指定できる。 キーフィールドが指定されなければ、 グローバルオプションで行全体が比較される。 キーフィールド指定がされた場合、 順序オプションが特に指定されなかったフィールドには、 グローバルオプションが継承される。
-b
各行の比較の際に、行頭の空白を無視する。
-d
「電話帳」順でソートする。 アルファベット、数字、空白以外のキャラクタをすべて無視してソートする。
-f
ソートの際に、小文字を対応する大文字と同じに扱う。 例えば `b' は `B' と同じとみなされる。
-g
strtod(3) を用いて数値に変換した後、その数値順にソートする。 これを用いると、浮動小数点の理工学的な記法 (`1.0e-34' や `10e100' など) を扱うことができる。このオプションは、他に手段がない場合に限って用いること。 これは -n よりずっと遅いし、有効桁数が多すぎると、 丸めたかたちで比較されてしまう。 さらに、倍精度浮動小数点の範囲で扱えない数値は 0 であるかのように処理される。 またオーバーフロー・アンダーフロー・変換エラーは報告されない。
-i
印字可能でない文字を無視する。
-n
数値順に評価する。行先頭の文字列 (空白が前置されていても良い) を数値文字列として比較する。 数値文字列は、先頭の - 符号 (なくても良い)、 0 桁以上の数字、 そして小数点と 0 桁以上の数字 (なくても良い) からなる。

sort は浮動小数点表記文字列を、あまり普通でない方法で比較する。 まず各文字を C の double 方に変換してからそれらの値を比較するのではなく、 2つの文字の基数点 (radix point) を揃えて、1 文字づつ比較するのである。 この方法の利点は速度である。実際この方法は、 2つのそれぞれの文字列を double に変換してから比較するよりずっと速い (あるいは integer 変換に比べてすらずっと速い)。 また精度の問題も生じない。多くのシステムでは、 文字列を double に変換してから比較する方法では、 精度は 16 桁に制限されてしまう。
   先頭の `+' や指数表記は認識できない。 このような文字列を数値的に比較するには -g を用いること。

-r, --reverse
比較の結果を逆順にする。より大きなキー値を持つ行が、 より早く現われるようになる。
-M
行頭の空白文字をすべて無視して最初に現われた 3 文字を、 月の名称の省略形とみなして `JAN' < `FEB' < ... < `DEC' の順でソートする。 小文字は大文字と同じに扱われる。 月の名称にない文字列は、より低位であるとみなされる。
 

その他のオプション

+POS1[-POS2]
ソートフィールド指定の obosolete な古い形式。行の POS1 から POS2 の直前までのフィールドを指定する。 POS2含まないPOS2 が省略されたら行末まで。 フィールドと文字位置はそれぞれ 0 から数えはじめる。
-k POS1[,POS2]
-K POS1[,POS2] ソートフィールド指定の POSIX 形式。今後はこちらが推奨される。行の POS1 から POS2 までのフィールドを指定する。 POS2含むPOS2 が省略されたら行末まで。 フィールドと文字位置はそれぞれ 0 から数えはじめる。
-o OUTFILE
出力先を標準出力から OUTFILE に変更する。 OUTFILE が入力ファイルのどれかひとつだった場合、 sort はその入力ファイルを一時ファイルにコピーしてから、ソートと OUTFILE への出力を行う。
-t SEPARATOR
各行からソートキーを検索する際、文字 SEPARATOR をフィールドのセパレーターにする。 デフォルトでは、 フィールドは空白以外の文字と空白文字の間の空文字列 (empty string) によって分離される。 例えば入力行として ` foo bar' が与えられた場合、 sort はこの行をフィールド ` foo' と ` bar' に分離する。 フィールドセパレーターは、 その前後のフィールドには含まれないものとされる。
-u
デフォルトの動作と -m オプションの動作では、等しいとされた行のうちの最初のものだけを表示する。 -c オプションの動作では、 連続した行で等しいものがないかどうかをチェックする。
-z
入力における行の末尾が、<LF> (ラインフィード) ではなく <NUL> (ゼロバイト文字) で終了するとみなす。 このオプションは `perl -0' や `find -print0' や `xargs -0' などと組み合わせて使うと便利で、 これらは任意のパス名を扱う際に信頼性を上げる効果を持つ (ラインフィード文字が含まれるパス名も正しく扱える)。
-S SIZE
SIZE KB のバッファを使う。 単位指定文字 (後述) を用いれば、単位を変更できる。
-T TEMPDIR
TEMPDIR を一時ファイルを置くディレクトリにする。 このオプションは環境変数 TMPDIR より優先される。-T オプションが複数回指定されると、 それぞれのディレクトリが用いられ、 巨大なソートやマージの際には性能が上がるかもしれない。
--help
標準出力に使用方法のメッセージを出力して正常終了する。
--version
標準出力にバージョン情報を出力して正常終了する。
 

数値的に降順 (逆順) にソートする。

sort -nr

アルファベット順にソートし、第 1・第 2 フィールドは無視する。 キーに開始フィールドとなる 3 だけを指定すれば、各行末までが比較される。

sort -k3

第 2 フィールドで数値的にソートし、 同じになったものを第 5 フィールドの第 3〜第 4 文字で更にソートする。 フィールドの区切りとして `:' を用いる。

sort -t : -k 2,2n -k 5.3,5.4

`-k 2,2' の代わりに `-k 2' と指定すると、 sort は第 2 フィールドから行末までの全ての文字を、 プライマリな「数値」キーとして扱ってしまう。 通常の用途では、1 つ以上のフィールドにまたがったキーを 数値的に扱うと、望む結果は得られないだろう。

`n' の指定が最初のキーの末尾で行われている点にも注意してほしい。 これは `-k 2n,2' や `-k 2n,2n' としても効果は同じである。 `b' 以外の全てのオプション指定は、開始フィールドに置いても キー指定全体の末尾に置いても、指定全体に効果を及ぼす。

パスワードファイルを第 5 フィールドでソートし、 先頭の空白文字は無視する。第 5 フィールドが同じ値を持つ行は、 第 3 フィールドのユーザー ID で数値的にソートする。

sort -t : -k 5b,5 -k 3,3n /etc/passwd

数値比較オプション -n はグローバルに用いても結果は同じ。

sort -t : -n -k 5b,5 -k 3,3 /etc/passwd

英大文字小文字の違いを無視してソートされた tags ファイルを生成する。

find src -type f -print0 | sort -t / -z -f |
xargs -0 etags --append

この `-print0', `-z', `-0' は、改行 (line feed) 文字を含む パス名がソート操作によって壊れないようにするためのものである。

最後の例。フィールドの先頭・末尾の空白群を無視するには、 第 1 キーの末尾フィールド指定もして、 `b' オプションを使えばよい。

sort -t : -n -k 5b,5b -k 3,3 /etc/passwd

あるいはグローバルな指定を -n の代わりに -b にして、第 2 キーのオプションに `n' を追加するかたちでもよい。

sort -t : -b -k 5,5 -k 3,3n /etc/passwd
 

乗数

数値の後には、倍数を指定するサイズ指定文字と、 通常のバイトを意味する B または 10 進の「商業用」バイトを意味する D を 続けて置くことができる。 たとえば `1KB' は `1024' と等しく、`1KD' は `1000' と等しい。 この例外は b (512 バイト)、c (1 バイト)、 w (使うべきでない - System V では 2 を意味し、 4.2BSD では 4 を意味する) の 3 つで、 これらの後に BD をおくことはできない。

k
キロ: 通常バイト指定なら 2^10 = 1024、10 進バイト指定なら 10^3 = 1000
M
メガ: 2^20 = 1,048,576 または 10^6 = 1,000,000
G
ギガ: 2^30 = 1,073,741,824 または 10^9 = 1,000,000,000
T
テラ: 2^40 = 1,099,511,627,776 または 10^12 = 1,000,000,000,000
P
ペタ: 2^50 = 1,125,899,906,842,624 または 10^15 = 1,000,000,000,000,000
E
エクサ: 2^60 = 1,152,921,504,606,846,976 または 10^18 = 1,000,000,000,000,000,000
Z
ゼタ: 2^70 = 1,180,591,620,717,411,303,424 または 10^21 = 1,000,000,000,000,000,000,000
Y
ヨタ: 2^80 = 1,208,925,819,614,629,174,706,176 または 10^24 = 1,000,000,000,000,000,000,000,000
 

移植性

sort の歴史的な (BSD と System V の) 実装では、 いくつかのオプション (特に -b, -f, -n) の解釈が異なる。 POSIX に従えば、-n はもはや -b を暗黙のうちに指定することはない。 このあたりを首尾一貫させるため、 -M も同様に変更されている。 これによって、曖昧な指定では フィールド内の文字位置の指定の意味が変わってしまうかもしれない。 唯一の解決法は、 -b を明示的に指定することである。  

ロケール

LC_COLLATE
(特に他の指定がない限り) 全ての比較で用いられる 文字の照合順序を指定する。
LC_CTYPE
-b, -d, -f, -i といった出力順序オプションの動作に影響する。
LC_NUMERIC
基数文字と桁区切り文字 (, など) を指定する。
LC_TIME
月名のスペルを決める。 -M に影響する。
 

注意

プログラムのバグについては bug-textutils@gnu.org に報告してください。
man ページは Ragnar Hojland Espinosa <ragnar@ragnar-hojland.net> が作成しました。


関連キーワード

フィールド, 文字, ソート, 比較, sort, キー, 数値, 順序, 出力, 動作 

Index

名前
書式
説明
オプション
動作モード
出力順序オプション
その他のオプション
乗数
移植性
ロケール
注意

This document was created by man2html, using the manual pages.
Time: 03:54:29 GMT, May 19, 2022