sortは,与えられたファイル,または与えられない場合や, `-'のfileの場合は標準入力からの全ての行を,ソート,統合,ま たは比較します.デフォルトで,sortは結果を標準出力に書き出し ます.概要です.
sort [option]... [file]...
sortは,処理時に三つのモードがあります.ソート(デフォルト), 統合,そしてソートされてることの調査です.以下のオプションで処理モード を変更します.
行の組は,以下のように比較されます.キーフィールドが指定された場合, sortは,それぞれのフィールドの組を,コマンドラインで指定され た順番で,関連する順序オプションで,差が見つかるまで,またはフィールド の残りが無くなるまで比較します.指定されない場合は,すべて比較する際, LC_COLLATEロカールで指定された,文字の順番を使用します. 1
大域的なオプション`bdfgiMnr'が与えられて,キーフィールドが指定さ れていない場合,sortは大域的なオプションに従い,行全体を比較 します.
最終的に,全てのキーが同じとき(または,順序オプションが全く指定されて いない場合),最後の手段として,sortは行全体を比較します.最 後の手段は,--reverse(-r)の大域的なオプションを尊重 して比較します.--stable(-s)オプションは,この最後の 手段では利用できず,それは,全てのフィールドの比較が同じになる行は,元 の相対的な順序のままにするためです.フィールドや大域的なオプションが指 定されない場合,--stable(-s)は効果がありません.
gnu sortは,(全てのgnuユーティリティで指定されるよ うに)入力行の長さの制限や,行で許可されるバイト数の限界がありません. 更に,入力ファイルの最終バイトが改行でない場合,gnu sortは,黙ってそれを供給します.行の後ろの改行は,比較の目的 では行の一部です.
0 エラーがない場合
1 -cオプションとともに呼び出され,入力が適切にソートされていない場合
2 エラーが生じた場合
環境変数TMPDIRが設定されている場合,sortは,一時ファイ ルのディレクトリとして,/tmpの代わりにその変数をディレクトリと して使用します.--temporary-directory(-T)オプション は,順序的に環境変数に優先します.
以下のオプションは,出力行の順序に影響します.それらは,大域的,または キーフィールドの一部として指定してもかまいません.キーフィールドが指定 されていない場合,大域的なオプションは行全体の比較に対して適用されます. それ以外では,大域的なオプションは,それ自身オプションが指定されていな いキーフィールドに継承されます.以前のPOSIXのバージョンの sortでは,大域的なオプションはキーフィールドだけに影響するの で,移植性の高いシェルスクリプトでは大域的なオプションを最初に指定すべ きです.
strtod
を使用し,数値的なソートをします.これで,
1.0e-34
と10e100
のような浮動小数点の数を,科学的な表記方
で指定できます.LC_NUMERICロカールで小数点文字を決定します.オー
バーフローや,アンダーフロー,変換エラーは報告しません.以下の順番を使
用します.
他に選択肢が無い場合のみ,このオプションを使用してください.
--numeric-sort(-n)よりはるかに遅く,浮動小数点に変換
するとき,情報を失うはずです.
数値的なソートは,浮動小数点の数値を表現する文字列を比較するため,慣習
的とは思われない手法を使用します.最初にそれぞれの文字列をCの
double
形式に変換してそれらの値を比較するのではなく,
sortは,二つの文字列の小数点文字を一列に並べて,一度に文字の
列を比較します.このアプローチを使う一つの利益は速度です.実際には,二
つの対応する文字列を倍精度浮動小数点に(または,文字列を整数に)変換し,
倍精度浮動小数点を比較するより効率的です.更に,精度による損失はありま
せん.それぞれの文字列を比較前にdouble
に変換すると,ほとんどの
システムで16桁程度に精度が制限されるでしょう.
前置される`+'も,指数表記も認識されません.そのような文字列を数値
的に比較するために,-gオプションを使用してください.
その他のオプションは以下の通りです.
sort -o F F
とcat F | sort -o F
のようなコマンドを使用する
ことで,同じファイルを安全にソートすることが可能です.
より新しいシステムでは,POSIXLY_CORRECTが設定されている場合,
-oを入力ファイルの後に書くことができません.例えば,
`sort F -o F'です.移植性の高いスクリプトでは,すべての入力ファイ
ルの前に-o output-fileを指定すべきです.
このオプションで,デフォルトより大きいまたは小さいソートバッファを用い
て開始させることで,sortのパフォーマンスの改善することが可能
です.しかし,このオプションは初期のバッファサイズだけに影響します.
sizeより大きな入力行をsortが見つけた場合,バッファは
size以上に大きくなります.
フィールド分離文字としてゼロバイト(ASCII nul (Null)文字)
を指定するために,二文字の文字列`\0',例えば`sort -t '\0''を
使用して下さい.
歴史的な(BSDとSystem Vの)sortの実装は,解釈が異なるオプショ ンがあり,特に,-b,-fと-nがあげられます. gnu sortは,POSIXの動作に従い,それは通常(常 にではない!)System Vの動作に似ています.POSIXによると, -nは,もはや-bを暗黙に指定しません.一貫性のため, -Mも同様に変更されました.これは,フィールドの指定が明確でな い状況で,文字の位置の意味に影響するかもしれません.唯一の訂正方法は, 明示的に-bを加えることです.
-kオプションを用いたソート時のフィールド指定の位置は, `f.c'形式となり,fは使用するフィールド数で, cはフィールドのはじまりから数えた最初の文字までの数です.最初の 位置として,`.c'が省略されているとフィールドの最初の文字を 用います.-bオプションが指定されている場合,指定したフィール ドの`.c' の部分は,フィールドの最初の空白ではない文字から数 えます.
ソートキーの位置は,オプション文字`Mbdfinr'を加えてもかまわず,そ の場合,大域的な順序オプションは,特定のフィールドに使用されません. -bオプションは,指定した最初と最後のフィールドの一方または両 方に独立に適用され,大域的なオプションを継承する場合,両方に適用されま す.キーは複数のフィールドに跨ってもかまいません.
古いシステムでは,sortは時代遅れのソートキーを指定するゼロを 起点とした構文の`+pos1 [-pos2]'をサポートしています. POSIX 1003.1-2001 (see Standards conformance)ではこれを 許可していません.代わりに-kを使用してください.
様々なオプションの組合せを紹介する例は以下のようになります.
sort -nr
sort -k 3
sort -t : -k 2,2n -k 5.3,5.4
`-k 2,2'の代わりに`-k 2'と書いた場合,`sort'は二番目の フィールドで始まり,行の終りまで続く全ての文字を,主要な数値キー として使用することに注意してください.アプリケーションのほとんど大多数 に対しては,数値として一つフィールド以上に跨って扱うキーは,期待したも のではないでしょう.
また,`n'の修飾は,最初のキーに対し,フィールドの終りを指定するも のに適用されることに注意してください.それは,`-k 2n,2'や`-k 2n,2n'を指定することと同じです.全ての修飾は,`b'が関連する フィールドに適用されることを期待し,修飾文字がフィールドの最初 そして/または,キー指定のフィールドの終りに適用されるかどうかに依存し ません.
sort -t : -k 5b,5 -k 3,3n /etc/passwd
代わりに,大域的な数値の修飾-nを使用します.
sort -t : -n -k 5b,5 -k 3,3 /etc/passwd
find src -type f -print0 | sort -t / -z -f | xargs -0 etags --append
この状況では,-print0,-z,そして-0の使用は, Line Feed文字を含むパス名がソート処理で分割されないようにします.
最後に,前後の空白を無視するため,`b'修飾を最初のキーに対しフィー ルドの終りの指定に適用できます.
sort -t : -n -k 5b,5b -k 3,3 /etc/passwd
または,大域的な-b修飾を-nの代わりに使用し,二番目の キー指定に`n'を明示します.
sort -t : -b -k 5,5 -k 3,3n /etc/passwd
[1] POSIXではないロカール(例えばLC_ALLを
`en_US'に設定している)場合,sortはいつもとは異なるソー
トされた出力を生成する可能性があります.その状況では,LC_ALL環境
変数を`C'に設定してください.LC_COLLATEだけを設定することに
は二つの問題があることに注意してください.最初は,LC_ALLが既に設
定されている場合,無効になることです.二番目は,LC_CTYPE(または
LC_CTYPEが設定されていない場合はLANG)が互換性の無い値に設
定されている場合の動作が未定義であることです.例えば,LC_CTYPEが
ja_JP.PCK
で,LC_COLLATEがen_US.UTF-8
の場合,動作は
未定義です.