SORT
Section: User Commands (1)
Updated: 7 October 2002
Index
JM Home Page
roff 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 つで、
これらの後に B や D をおくことはできない。
- 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>
が作成しました。
Index
- 名前
-
- 書式
-
- 説明
-
- オプション
-
- 動作モード
-
- 出力順序オプション
-
- その他のオプション
-
- 例
-
- 乗数
-
- 移植性
-
- ロケール
-
- 注意
-
This document was created by
man2html,
using the manual pages.
Time: 16:46:44 GMT, November 24, 2023