コマンド sort | |
| 原作者 | ケン・トンプソン( AT&T ベル研究所) |
|---|---|
| 開発者 | さまざまなオープンソースおよび商用開発者 |
| 初回リリース | 1971年11月3日 |
| 書かれた | C |
| オペレーティング·システム | Multics、Unix、Unix ライク、V、Plan 9、Inferno、MSX-DOS、IBM i |
| プラットフォーム | クロスプラットフォーム |
| タイプ | 指示 |
| ライセンス | coreutils : GPLv3+ プラン 9: MIT ライセンス |
コンピューティングにおいて、sort はUnixおよびUnix 系オペレーティング システムの標準コマンド ラインプログラムであり、入力行または引数リストにリストされているすべてのファイルの連結をソート順に印刷します。ソートは、入力の各行から抽出された 1 つ以上のソート キーに基づいて行われます。デフォルトでは、入力全体がソート キーとして使用されます。空白はデフォルトのフィールド区切り文字です。このコマンドは、実装によって異なる可能性のあるいくつかのコマンド ライン オプションをサポートしています。たとえば、" " フラグはソート順序を逆にします。
-r
歴史
sort一般的なソート機能を呼び出すコマンドは、最初に Multics 内に実装されました。[ 1 ]その後、バージョン 1 Unixに登場しました。このバージョンは、もともとAT&T ベル研究所のKen Thompsonによって書かれました。バージョン 4までに Thompson はパイプを使用するように変更しましたが、 sort は、ファイルをその場でソートするために使用されていたため、出力ファイルに名前を付けるオプションを保持していました。バージョン 5では、Thompson は標準入力を表すために "-" を発明しました。[2]
GNU coreutilsにバンドルされているソートのバージョンは、Mike HaertelとPaul Eggertによって書かれました。[3]この実装では、マージソートアルゴリズムが採用されています。
同様のコマンドは他の多くのオペレーティングシステムでも利用可能であり、例えばソートコマンドはASCIIのMSX-DOS2 Tools for MSX-DOSバージョン2の一部である。[4]
sortコマンドはIBM iオペレーティングシステムにも移植されています。[5]
構文
並べ替え [オプション]... [ファイル]...
がない場合FILE、またはFILEの場合-、コマンドは標準入力から読み取ります。
パラメータ
例
ファイルをアルファベット順に並べ替える
$猫の 電話帳
スミス、ブレット 555-4321
ドー、ジョン 555-1234
ドー、ジェーン 555-3214
エイブリー、コーリー 555-4132
フォガティ、スージー 555-2314
$ 電話帳
を並べ替えAvery, Cory 555-4132
Doe, Jane 555-3214
Doe, John 555-1234
Fogarty, Suzie 555-2314
Smith, Brett 555-4321
番号で並べ替え
この-nオプションは、プログラムを数値に従ってソートします。duコマンドは、ファイル サイズを表す数値で始まる出力を生成するため、その出力をsortにパイプして、ファイル サイズ (昇順) でソートされたファイルのリストを生成することができます。
$ du /bin/* |ソート-n
4 /bin/ドメイン名24 /bin/ls 102 /bin/sh 304 /bin/csh
lsオプションを指定した find コマンドは、7番目のフィールドにファイル サイズを出力するため、ファイル サイズ順に並べられたLaTeXファイルのリストは次のように生成されます。
$ find . -name "*.tex" -ls | sort -k 7n
列またはフィールド
特定の列で並べ替えるには、オプションを使用します-k。たとえば、-k 22 番目の列で並べ替えるには、" " を使用します。古いバージョンの sort では、この+1オプションにより、プログラムはデータの 2 番目の列 ( +23 番目など) で並べ替えていました。この使用法は非推奨です。
$猫 郵便番号
アダム 12345
ボブ 34567
ジョー 56789
サム 45678
ウェンディ 23456
$ sort -k 2n 郵便番号
アダム 12345
ウェンディ 23456
ボブ 34567
サム 45678
ジョー 56789
複数のフィールドで並べ替える
この-k m,nオプションを使用すると、複数のフィールドで構成される可能性のあるキー (列 で開始m、列 で終了n) で並べ替えることができます。
$猫の 割り当て
フレッド 2000
ボブ 1000
アン 1000
チャド 1000
ドン 1500
エリック 500
$ソート -k2,2n -k1,1 クォータ
エリック 500
an 1000
ボブ 1000
チャド 1000
ドン 1500
フレッド 2000
ここで、最初のソートは列 2 を使用して行われます。 は、列 2 で-k2,2n始まり、列 2 で終わるキーでソートし、数値順にソートすることを指定します。-k2を代わりに使用すると、ソート キーは列 2 から始まり、行の末尾まで拡張され、その間のすべてのフィールドにまたがります。 は、-k1,1列 1 の値を使用して同点を判定し、デフォルトでアルファベット順にソートすることを指示します。bob と chad は同じクォータを持ち、最終出力ではアルファベット順にソートされることに注意してください。
パイプ区切りファイルのソート
$ sort -k2,2,-k1,1 -t '|' 郵便番号
アダム|12345
ウェンディ|23456
サム|45678
ジョー|56789
ボブ|34567
タブ区切りファイルの並べ替え
タブで区切られた値を持つファイルをソートするには、列区切り文字としてタブ文字を指定する必要があります。この図では、シェルのドル引用符表記法[6] [7]を使用して 、タブをCエスケープシーケンスとして指定しています。
$ sort -k2,2 -t $'\t'電話帳Doe, John 555-1234 Fogarty, Suzie 555-2314 Doe, Jane 555-3214 Avery, Cory 555-4132 Smith, Brett 555-4321
逆順に並べ替え
この-rオプションは並べ替えの順序を逆にするだけです。
$ sort -rk 2n 郵便番号
ジョー 56789
サム 45678
ボブ 34567
ウェンディ 23456
アダム 12345
ランダムに並べ替え
GNU 実装には-R --random-sortハッシュに基づくオプションがあります。これは、同一の行をまとめてソートするため、完全なランダム シャッフルではありません。真のランダム ソートは、Unix ユーティリティshufによって提供されます。
バージョンで並べ替え
GNU 実装には、-V --version-sortテキスト内の自然なソート (バージョン) 番号であるオプションがあります。比較する 2 つのテキスト文字列は、文字のブロックと数字のブロックに分割されます。文字のブロックは英数字で比較され、数字のブロックは数値で比較されます (つまり、先頭のゼロをスキップし、数字が多いほど大きいことを意味し、そうでない場合は異なる左端の数字によって結果が決定されます)。ブロックは左から右に比較され、そのループの最初の等しくないブロックによって、どちらのテキストが大きいかが決定されます。これは、IP アドレス、Debian パッケージのバージョン文字列、および可変長の数字が文字列に埋め込まれている同様のタスクで機能します。
参照
参考文献
- ^ 「Multics コマンド」。www.multicians.org。
- ^ McIlroy, MD (1987). A Research Unix reader: annotated excerpts from the Programmer's Manual, 1971–1986 (PDF) (技術レポート). CSTR. Bell Labs. 139.
- ^ 「sort(1): テキストファイルの行をソートする - Linux man ページ」. linux.die.net .
- ^ 『MSX-DOS2 ツール ユーザーズマニュアル - MSX-DOS2 TOOLS ユーザーズマニュアル』. 1993 年 4 月 1 日 – インターネット アーカイブ経由。
- ^ IBM . 「IBM System i バージョン 7.2 プログラミング Qshell」(PDF) . IBM . 2020 年 9 月 5 日閲覧。
- ^ 「GNU Bash リファレンスマニュアル、Bash バージョン 4.2: セクション 3.1.2.4 ANSI-C 引用符」。Free Software Foundation, Inc. 2010 年 12 月 28 日。2013年2 月 1 日に取得。
$'string' 形式の単語は特別に扱われます。単語は string に展開され、バックスラッシュでエスケープされた文字は ANSI C 標準で指定されているように置き換えられます。
- ^ Fowler, Glenn S.; Korn, David G. ; Vo, Kiem-Phong. 「KornShell FAQ」。2013 年 5 月 27 日時点のオリジナルよりアーカイブ。2015年3 月 3 日閲覧。
$'...' 文字列リテラル構文は、スクリプトで特殊文字を入力する問題を解決するために ksh93 に追加されました。ANSI-C 規則を使用して、'...' 間の文字列を変換します。
さらに読む
- Shotts (Jr), William E. (2012)。Linuxコマンドライン: 完全入門。No Starch Press。ISBN 978-1593273897。
- McElhearn, Kirk (2006)。Mac OS X コマンドライン: Unixの裏側。John Wiley & Sons。ISBN 978-0470113851。
