ユーザーコマンド sort(1)
【名前】
sort - テキストファイルのソート、マージ、順序の確認
【形式】
/usr/bin/sort [-bcdfimMnru] [-k keydef] [-o output] [-
S kmem] [-t char] [-T directory] [ -y [kmem]] [-z recsz] [
+pos1 [-pos2]] [file ...]
/usr/xpg4/bin/sort [-bcdfimMnru] [-k keydef] [-o output] [-
S kmem] [-t char] [-T directory] [ -y [kmem]] [-z recsz] [
+pos1 [-pos2]] [file ...]
【機能説明】
sort コマンドは、指定されたファイルのすべての行をソート し、
その結果を標準出力に書き込みます。
比較は、各入力行から抽出された 1 つまたは複数のソートキー に
基づいて行われます。デフォルトでは、1 つのソートキー、つまり
入力行全体が使用されます。また、ソートの順は、現在のロケール
の照合順序に従います。
【オプション】
次にあげるオプションは、デフォルトの動作を変更します。
[/usr/bin/sort]
-c 引数で指定された入力ファイルが、現在のロケー
ルの照合順序に従ってソートされていることを確
認します。終了ステータスが設定されますが、正
しくソートされていれば何も出力されません。
[/usr/xpg4/bin/sort]
-c どんな場合でも何も出力されない、という点を除
き /usr/bin/sort と同じです。
-m マージのみを行います。入力ファイルはソート済
みであるものとします。
-o output 標準出力の代わりに使用される出力ファイル名を
指 定 します。このファイルは入力ファイルの 1
つと同じでも構いません。
-S kmem ソートを行うために使用するスワップメモリー容
量 の最大値を指定します (デフォルトの単位は
キロバイト)。kmem には、バイト (b)、キロバイ
ト (k)、メガバイト (m)、ギガバイト (g)、テラ
バイト (t)、の数値を直接指定したり、イ ン ス
トールされている物理メモリーに対する割合パー
セント (%) で指定することができます。
-T directory directory 引数は、一時ファイルを入れるディレ
クトリ名です。
-u 同一行を削除します。同じキーを持つ行の組から
1 行のみを取り出し、他を抑制します。-c オプ
ションと同時に指定すると、入力ファイルがソー
ト済みであることと、同じキーを持つ複数の行が
存在しないことの両方を確認します。
-y kmem (旧式オプション) sort が最初に使用する主記憶
量を指定するために使用されていました。このオ
プションは、仮想メモリーシステムには適してい
ません。sort が使用するメモリー容量は、-S オ
プションで指定するようになりました。
-z recsz (旧式オプション) システム固有のデ フォ ル ト
バッファサイズを超えるような行が存在した場合
でも、異常終了を起こさないようにするためのオ
プションでした。現在では、最長の行が書き込め
る大きさのバッファを sort が自動的に割り当て
る の で、このオプションは意味がなくなりまし
た。
[並べ換えオプション]
デフォルトのソートの並び換え順は、LC_COLLATE の値に依存し ま
す。 LC_COLLATE が C に設定された場合、ASCII の並べ換え順で
ソートされます。LC_COLLATE が en_US に設定された場合、ある 2
つの文字列のうち、一方が他方よりも先に大文字を使用していてそ
の他の点では一様である場合は大文字・小文字を区別しますが、そ
れ以外は大文字・小文字を区別しません。その他のロケールでは、
別の並べ換え順でソートされます。
次にあげるオプションは、デフォルトの並べ換え規則を変更 し ま
す。ソートキーフィールド指定とは無関係に並べ換えオプションが
ある場合、要求された並べ換え規則は、すべてのソートキーに適用
されます。指定された並べ換えオプションが特定のソートキーに付
いている場合 (「ソートキーオプション」の説明を参照)、この オ
プ ショ ンはそのキーに対するすべてのグローバルな並べ換えオプ
ションを無効にします。旧式のキーオプションでは、+pos1 オ プ
ショ ンのあとに以下のオプションを 1 つ以上指定すると、その直
前のオプションで指定されたキーフィールドに対してだけ有効にな
ります。
-d 辞書編集順にします。比較では、英字、数字およ
び空白 (空白文字およびタブ) だけが有効です。
-f 小文字と大文字の区別をしません。
-i 非印字文字を無視します。
-M 月名とみなして比較します。フィールドの先頭 3
文字 (空白文字以外) は大文字に変換し、比較し
ます。たとえば、英語ではソートの並び換え順は
JAN < FEB < ... < DEC です。月名でないフィー
ルドは、JAN よりも低く見なされます。-M オ プ
ショ ンは -b オプションの動作を含みます(下記
を参照)。
-n ソートキーを、省略可能な空白文字、省略可能な
マイナス符号、省略可能な小数点および桁区切り
文字 (現在のロケールに定義されているもの) を
持 つ 0 個以上の数値からなる最初の数値列に限
定します。キーの値は算術的な数値としてソート
されます。空の数値列は、ゼロとみなされます。
先行するゼロおよびゼロに付けられた符号は、並
べ換えに影響を与えません。
-r 比較の意味を反転します。
[フィールド区切り文字オプション]
フィールド区切り文字オプションの扱い方は、以下のオプションを
使って変更できます。
-b 限定ソートキーの開始および終了位置の決 定 時
に、先行する空白文字を無視します。最初のソー
トキーオプションの前に -b オプションが指定さ
れている場合、このオプションはすべてのソート
キーオプションに適用されます。それ以外の場合
は、 オ プ ショ ン 引 数 の -kfield_start 、
field_end 、+pos1 、-pos2 の各々に -b オ プ
ションを個別に指定します (下記を参照) 。
-t char char をフィールド区切り文字として使 用 し ま
す。char は、(ソートキーに含まれることがあっ
ても) フィールドの一部とは見なされま せ ん。
char は、繰り返し出てきてもそれぞれが有効で
す (たとえば、<char><char> は空フィールド を
区 切ります) 。-t を省略すると、デフォルトの
フィールド区切り文字として空白文字が用いられ
ます。空白でない文字に続く、最大長の空白文字
列が、フィールド区切り文字となります。
[ソートキーオプション]
ソートキーは以下のオプションを使って指定できます。
-kkeydef keydef 引数の形式は次のとおりです。
-k field_start [type] [,field_end [type] ]
個々の引数の意味を以下に説明します。
field_start と field_end
行の一部分に限定したキーフィール
ドを定義します。
type
文字群 bdfiMnr から得られる修 飾
子です。b 修飾子は -b オプション
と同じ働きですが、対 象 と し た
field_start または field_end だ
けに適用されます。フィールド内の
文字は、フィールド内の最初の空白
でない文字から数えられま す。 な
お、 こ れ は first_character と
last_character に個別に適用さ れ
ます。その他の修飾子も、同じ文字
で示すオプションと同じ働き で す
が、対象としたキーフィールドにの
み適用されます。このように動作す
る の は、 field_start ま た は
field_end のどちらか一方、あるい
は両方が指定されているときです。
field_start と field_end のい ず
れ か に修飾子が付けられていると
き、それらはオプションの対象とは
なりません。
複数のキーフィールドがある場合、後に
あるキーは、それ以前のキーが等しいと
比較された場合にだけ比較されます。-u
オプションが指定された場合を除き、等
しいと比較された行は、-d 、-f 、 -i
、-n 、-k のいずれもが省略された場合
と同じように並べ換えられます (-r オ
プションは、指定されていれば有効) 。
また行の中の全バイトを用いて比較され
ます。
次の表記を見てください。
-k
field_start[type][,field_end[type]]
こ れ は field_start で 始 ま り
field_end で終わるキーフィールドを定
義するものです。ただ し field_start
が 行の限界を超えていたり、field_end
のあとに位置している場合に は、 キー
フィー ルドは空となります。field_end
指定を省略すると、行の終わりと見なさ
れます。
フィールドは、区切り文字でない最長の
文 字列で、-t オプションが指定されて
いなければ先行するフィールド区切り文
字も含みます。
keydef オプション引数の field_start
部分の形式は次のとおりです。
field_number[.first_character]
フィールド、およびフィールド内の文字
に は、 1 から始まる番号が付けられま
す。field_number と first_character
指定は、いずれも正の 10 進整数と解釈
され、ソートキーの部分として用いられ
る 先 頭 の 文 字 を 指 定 し ます。
.first_character 指定を省略する と、
フィールドの先頭文字が使用されます。
keydef オプション引数の field_end 部
分の形式は次のとおりです。
field_number[.last_character]
このうち field_number の意味は上記の
field_start の も の と 同 じです。
last_character 指定は、負でな い 10
進整数と解釈され、ソートキーの部分と
して用いられる最後の文字を指定 し ま
す。 last_character の値の評価結果が
ゼロのとき、また は .last_character
指定が省略されたときは、field_number
が示すフィールドの最終文字が使用され
ます。
-b オプションまたは b 修飾子が有効な
とき、フィールド中の文字はそのフィー
ルドの最初の空白でない文字から数えら
れ ま す。 これは first_character と
last_character に別々に適用 さ れ ま
す。
[+pos1 [-pos2]] -kkeydef オプションと同等な機能を提供する 旧
式のオプションです。
pos1 および pos2 はそれぞれ m.n という形式を
と り、オプションでフラグ bdfiMnr の中から 1
つまたは複数のフラグを後に付けることができま
す。 +m.n によって指定される開始位置は、m+1
番目のフィールドにある n+1 番目の文字であ る
と 解釈されます。.n がない場合は、m+1 番目の
フィールドの先頭文字を指す .0 を意味します。
b フラグが有効な場合、m+1 番目のフィールドの
最初の空白文字以外の文字から n が数えられ ま
す。 +m.0b は m+1 番目のフィールド内の最初の
空白文字以外の文字を指します。
-m.n によって指定される最終位置は、m 番目 の
フィー ルドの最後の文字から後へ n 番目の文字
(区切り文字も含む) を意味するように解釈さ れ
ま す。.n がない場合、m 番目のフィールドの最
後の文字を指す .0 を意味します。b フラグが有
効な場合、m+1 番目のフィールドの前についてい
る最後の空白文字から n が数えられます。し た
がって、-m.1b は、m+1 番目のフィールド内の最
初の空白文字以外の文字を指します。
次の指定を見てください。
+w.xT -y.zU
これは +pos1 -pos2 の形式をタイプ修飾子 T と
U とともに指定したもので、以下の記述と同等で
す。
undefined (z==0 & U b を含む & -t が存在する)
-k w+1.x+1T,y.0U (z==0 でその他の場合)
-k w+1.x+1T,y+1.zU (z > 0)
ソートキー(-k オプションおよび旧式 の +pos1
と -pos2) は少なくとも 9 個記述できます。複
数個ある場合、コマンド行での順序が意味を持ち
ま す。ソートキーを 1 つも指定しないと、行全
体のデフォルトのソートキーが使用されます。
【オペランド】
以下のオペランドを指定できます。
file ソート、マージ、または確認するファイルのパス
名。 このオペランドを 1 つも指定しない場合、
または - を指定した場合には、標準入力が用 い
られます。
【使用法】
ファイルが 2 ギガバイト (2**31 バイト) 以上ある場合 の sort
の動作については、largefile(5) を参照してください。
【使用例】
以下の例では、sort キーを指定する方法のうち旧式のものと旧 式
でないものの両方を示します。これにより両形式の関係が理解しや
すくなるはずです。
例 1: 第 2 フィールドをキーにしてソートする
第 2 フィールドをソートキーとして用いて、infile の内容をソー
トします。
example% sort -k 2,2 infile
example% sort +1 -2 infile
例 2: 逆の順序でソートする
第 2 フィールドの 2 番目の文字をソートキーとして、infile1 お
よ び infile2 の内容を逆の順序でソートし、outfile に出力しま
す。なお第 2 フィールドの先頭文字はフィールド区切り文字で あ
ると想定しています。
example% sort -r -o outfile -k 2.2,2.2 infile1 infile2
example% sort -r -o outfile +1.1 -1.2 infile1 infile2
例 3: ファイル中の特定の 1 文字をキーとしてソートする
第 2 フィールドの 2 番目の空白でない文字をソートキーとして、
infile1 と infile2 の内容をソートします。
example% sort -k 2.2b,2.2b infile1 infile2
example% sort +1.1b -1.2b infile1 infile2
例 4: ユーザーID でソートする
ユーザーID (コロンで区切った 3 番目のフィールド) でソート さ
れたパスワードファイル passwd(4) を出力します。
example% sort -t : -k 3,3n /etc/passwd
example% sort -t : +2 -3n /etc/passwd
例 5: フィールドが重複する行を除外してソートされた行を出力す
る
ソート済みファイル infile の行の出力にお い て、 同 じ 第 3
フィールドを持つ行のうち、最初に現われる行だけを出力します。
example% sort -um -k 3.1,3.0 infile
example% sort -um +2.0 -3.0 infile
例 6: ホスト IP アドレスでソートする
次のコマンドは、どちらも数値形式の IP アドレス (先頭か ら 4
番 目 までの数値フィールド) でソートされた hosts(4) ファイル
(IPv4 ホストデータベース) を出力します。
example$ sort -t . -k 1,1n -k 2,2n -k 3,3n -k 4,4n /etc/hosts
example$ sort -t . +0 -1n +1 -2n +2 -3n +3 -4n /etc/hosts
'.' は、フィールドの区切り文字であると同時に、多くのロケール
で 10 進 数 の区切り文字として使用されています。そのため、
フィールドの末尾の指定に失敗すると、2 つめのフィールド が 1
つめのフィールドの小数部として認識されてしまうといった問題が
発生します。
【環境】
sort の実行に影響を与える環境変数 LC_CTYPE 、LC_MESSAGES 、
NLSPATH についての詳細は、environ(5) を参照してください。
LC_CTYPE テキストデータのバイト列を文字 (たとえば、引
数や入力ファイル中のシングルバイト文字や複数
バイト文字) として解釈するロケールや、-b 、
-d 、-f 、-i 、-n の各オプション用に、文字分
類の方法を指定するロケールを定義します。
LC_NUMERIC -n オプション用に、小数点や桁区切り文字を 指
定するロケールを定義します。
【終了ステータス】
以下の終了ステータスが返されます。
0 入力ファイルはすべて正常に出力された、または
-c が指定され入力ファイルは正しくソートされ
ていた
1 -c オプションが指定され入力ファイルは指定 ど
お り にソートされていなかった、または -c と
-u の両オプションが指定され 2 つの入力 行 の
キーが等しかった
>1 エラーが発生した
【ファイル】
/var/tmp/stm???
【属性】
次の属性については attributes(5) のマニュアルページを参照 し
てください。
[/usr/bin/sort]
____________________________________________________________
| 属性タイプ | 属性値 |
|_____________________________|_____________________________|
| 使用条件 | SUNWesu |
|_____________________________|_____________________________|
| CSI | 対応済み |
|_____________________________|_____________________________|
[/usr/xpg4/bin/sort]
____________________________________________________________
| 属性タイプ | 属性値 |
|_____________________________|_____________________________|
| 使用条件 | SUNWxcu4 |
|_____________________________|_____________________________|
| CSI | 対応済み |
|_____________________________|_____________________________|
【関連項目】
comm(1), join(1), uniq(1), nl_langinfo(3C), strftime(3C),
hosts(4), passwd(4), attributes(5), environ(5), large-
file(5), XPG4(5)
【診断】
さまざまなトラブル (たとえば、入力行が長すぎる) が発生した場
合 や -c オプションにおいてソート済みでないことを発見した場
合、コメントを出力し、0 以外の終了ステータスで終了します。
【注意事項】
入力ファイルの最終行に復帰改行文字 (NEWLINE) がな い 場 合、
sort はこれを追加し、警告メッセージを出力し、処理を継続しま
す。
sort で、等しいキーを持つ行の相対的な順序が保存されるとい う
保証はありません。
-S オプションを使用して、特定の用途に sort の動作を調整す る
こ とができます。ただし、sort は仮想メモリーシステムよりも、
ソート時により適切に膨大な量のメモリーを利用できることに注意
し てください。このため、-S を使用して、膨大なメモリーを利用
するようにしてソートを実行すると、パフォーマンスがかなり低く
なることもあります。
前述のように、フィールド修飾子の一部 (-M や -d など) は、 入
力データをロケール固有の設定と照合して解釈します。ロケール固
有の設定を考慮に入れていないと、解釈の結果が予期しないものに
なることがあります。たとえば月の名前をキーにする場合、「一般
に通用する」省略名を使用しても、sort コマンドはそれを正し い
名 前に読み換えることはしません。sort コマンドが認識する省略
名は、nl_langinfo(3C) または strftime(3C) で定義されているも
のだけです。表示可能順や辞書編集順でソートする場合、このよう
な定義がロケールで適切に設定されていないと、空のソートキーが
返されることがあります。結果として、次のキーが適切な並べ替え
を決定する有効なキーになります。
|
|