| 選別 | |
|---|---|
コマンド sort | |
| 原作者 | ケン・トンプソン(AT&Tベル研究所) |
| 開発者 | さまざまなオープンソースおよび商用開発者 |
| 初回リリース | 1971年11月3日 (1971年11月3日) |
| 書かれた | C |
| オペレーティング·システム | Multics、Unix、Unix ライク、V、Plan 9、Inferno、MSX-DOS、IBM i |
| プラットフォーム | クロスプラットフォーム |
| タイプ | 指示 |
| ライセンス | coreutils : GPLv3+プラン 9: MIT ライセンス |
コンピューティングにおいて、sortはUnixおよびUnix系オペレーティングシステムの標準コマンドラインプログラムであり、入力行または引数リストにリストされたすべてのファイルの連結をソート順に出力します。ソートは、入力の各行から抽出された1つ以上のソートキーに基づいて行われます。デフォルトでは、入力全体がソートキーとして扱われます。デフォルトのフィールド区切り文字は空白です。このコマンドは、実装によって異なる可能性のあるいくつかのコマンドラインオプションをサポートしています。たとえば、" "フラグはソート順序を逆にします。ソート順序は環境のロケール設定の影響を受けます。[ 1 ]-r
sort汎用ソート機能を呼び出すコマンドは、Multics で初めて実装されました。[ 2 ]その後、 Unixバージョン 1で登場しました。このバージョンは、AT&T ベル研究所のケン・トンプソンによって最初に作成されました。バージョン 4では、トンプソンはパイプを使用するように修正しましたが、sort は出力ファイルに名前を付けるオプションを保持していました。これは、ファイルの並べ替えに使用されていたためです。バージョン 5では、トンプソンは標準入力を表す "-" を発明しました。[ 3 ]
sortは、X/Open Portability Guide Issue 2(1987)の一部です。そこからPOSIXに継承されました。[ 4 ]
GNU coreutilsにバンドルされているsortのバージョンは、Mike HaertelとPaul Eggertによって作成されました。[ 1 ]この実装はマージソートアルゴリズムを採用しています。並列ソートのオプションも提供されていますが、8スレッドを超えるとパフォーマンスの向上は減少します。[ 5 ] GNU parallelは、同様のパフォーマンス向上特性を持つsortの並列呼び出しを実行するラッパーも提供しています。48コアシステムでは、速度向上は約3倍です。[ 6 ]
sortコマンドはIBM iオペレーティングシステムにも移植されており、POSIX互換のQshellからアクセス可能となっている。[ 7 ]
同様のコマンドは他の多くのオペレーティングシステムでも利用可能であり、例えばソートコマンドはASCIIのMSX-DOS2ツール(MSX-DOSバージョン2用)の一部である。[ 8 ]
「uutils」プロジェクトは、 Rustsortで書かれたクロスプラットフォーム実装を提供し、GNU coreutilのすべてのオプションをサポートしています。RustのマルチスレッドライブラリであるRayonのor関数を使用し、 timsortに着想を得た適応型マージソート、またはパターンディフィート型クイックソートのバリエーションを実装しています。[ 9 ]par_sort_bypar_sort_unstable_by
並べ替え [オプション]... [ファイル]...
がない場合FILE、またはFILEの場合-、コマンドは標準入力から読み取ります。
以下の表で「Short」は、オプションの1文字形式(短縮形)のみをサポートしていることを示します。長いオプションは元々GNU拡張であり、SUSやPOSIXのどのバージョンにも含まれていません。その後、FreeBSDでも採用されました。
| 名前 | 説明 | SUS / POSIX | プラン9 | インフェルノ | フリーBSD | リナックス | MSX-DOS | IBM i |
|---|---|---|---|---|---|---|---|---|
| -b , --先頭の空白を無視 | ro先頭の空白を無視します。 | 短い | 短い | いいえ | はい | はい | いいえ | 短い |
| -c、--check | 入力ファイルがソートされていることを確認します。 | いいえ | 短い | いいえ | はい | はい | いいえ | 短い |
| -C , --check=<サイレント|静か> | -c と似ていますが、最初の不良行は報告されません。 | いいえ | いいえ | いいえ | はい | はい | いいえ | いいえ |
| -d , --dictionary-order | 空白と英数字のみを考慮します。 | 短い | 短い | いいえ | はい | はい | いいえ | 短い |
| -f , --大文字と小文字を区別しない | 小文字を大文字に変換します。 | 短い | 短い | いいえ | はい | はい | いいえ | 短い |
| -g、--general-numeric-sort、--sort=general-numeric | 一般的な数値で比較します。 | 短い | 短い | いいえ | はい | はい | いいえ | いいえ |
| -h、--human-numeric-sort、--sort=human-numeric | 人間が判読できる数値を比較します (例: 2K 1G)。 | 短い | いいえ | いいえ | はい | はい | いいえ | いいえ |
| -i , --ignore-nonprinting | 印刷可能な文字のみを考慮します。 | 短い | 短い | いいえ | はい | はい | いいえ | 短い |
| -k , --key= POS1 [, POS2 ] | キーをPOS1(起点1)から開始し、POS2(デフォルトの行末) で終了します。 | いいえ | いいえ | いいえ | はい | はい | いいえ | いいえ |
| -m | マージのみ。入力ファイルは事前にソートされているものと想定されます。 | いいえ | 短い | いいえ | はい | はい | いいえ | 短い |
| -M、--month-sort、--sort=month | (不明) < 'JAN' < ... < 'DEC' を比較します。 | 短い | 短い | いいえ | はい | はい | いいえ | いいえ |
| -n、--numeric-sort、--sort=numeric | 文字列の数値に応じて比較します。 | 短い | 短い | 短い | はい | はい | いいえ | 短い |
| -o出力 | 標準出力の代わりに OUTPUTファイルを使用します。 | いいえ | 短い | いいえ | はい | はい | いいえ | 短い |
| -r、--reverse | 比較の結果を反転します。 | 短い | 短い | 短い | はい | はい | いいえ | 短い |
| -R、--random-sort、--sort=random | シャッフルしますが、同じキーをグループ化します。参照: shuf | いいえ | いいえ | いいえ | はい | はい | いいえ | いいえ |
| -s | 最後の手段の比較を無効にすることでソートを安定させます。 | いいえ | いいえ | いいえ | はい | はい | いいえ | いいえ |
| -Sサイズ、--buffer-size=サイズ | メモリ バッファの最大サイズには size を使用します。 | いいえ | いいえ | いいえ | はい | いいえ | いいえ | いいえ |
| -t文字、--フィールドセパレータ=文字 | 空白以外の文字から空白文字への遷移の代わりにcharを使用します。つまり、フィールドを区切る「タブ文字」はcharです。 | いいえ | 短い | いいえ | はい | はい | いいえ | 短い |
| -T dir、--temporary-directory= dir | 一時的にdirを使用します。 | いいえ | 短い | いいえ | はい | はい | いいえ | いいえ |
| -u、--ユニーク | 等しいキーを持つ行の各セットで 1 つを除くすべてを抑制するための一意の処理。 | いいえ | 短い | いいえ | はい | はい | いいえ | 短い |
| -V , --version-sort | テキスト内の(バージョン)番号の自然な並び替え | いいえ | いいえ | いいえ | はい | はい | いいえ | いいえ |
| -w | -i と似ていますが、タブとスペースのみを無視します。 | いいえ | はい | いいえ | いいえ | いいえ | いいえ | いいえ |
| -z、--zero-terminated | 改行ではなく0バイトで行を終了します | いいえ | いいえ | いいえ | はい | はい | いいえ | いいえ |
| - ヘルプ | ヘルプを表示して終了する | いいえ | いいえ | いいえ | はい | はい | いいえ | いいえ |
| --バージョン | バージョン情報を出力して終了する | いいえ | いいえ | いいえ | はい | はい | いいえ | いいえ |
| /R | 比較の結果を反転します。 | いいえ | いいえ | いいえ | いいえ | いいえ | はい | いいえ |
| /S | 各行の何桁を判断するかを決定する桁数を指定します。 | いいえ | いいえ | いいえ | いいえ | いいえ | はい | いいえ |
| /A | ASCII コードで並べ替えます。 | いいえ | いいえ | いいえ | いいえ | いいえ | はい | いいえ |
| /H | ワイルドカードを使用する場合は、隠しファイルも含めます。 | いいえ | いいえ | いいえ | いいえ | いいえ | はい | いいえ |
$猫の電話帳 スミス、ブレット 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/cshlsオプションを指定した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アン 1000ボブ 1000チャド 1000ドン 1500フレッド 2000ここでは、最初のソートは列2を使用して行われます。-k2,2nは、列2で始まり列2で終わるキーでソートし、数値順にソートすることを指定します。-k2の代わりに を使用すると、ソートキーは列2から始まり、行末まで拡張され、その間のすべてのフィールドを網羅します。 は、-k1,1列1の値を使用して同点を判定し、デフォルトでアルファベット順にソートすることを指示します。bobとchadは同じクォータを持ち、最終出力ではアルファベット順にソートされることに注意してください。
$ sort -k2,2,-k1,1 -t '|'郵便番号 アダム|12345ウェンディ|23456サム|45678ジョー|56789ボブ|34567タブ区切りの値を持つファイルをソートするには、列区切りとしてタブ文字を指定する必要があります。この図では、シェルのドル引用符記法[ 10 ] [ 11 ]を使用して 、タブを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アダム 12345GNU実装にはハッシュに基づくオプションがありますが、これは完全なランダムシャッフルではありません。なぜなら、同一の行をまとめてソートしてしまうからです。真のランダムソートはUnixユーティリティshuf-R --random-sortによって提供されます。
GNU実装には、-V --version-sortテキスト内の(バージョン)番号を自然な形でソートするオプションがあります。比較対象となる2つのテキスト文字列は、文字ブロックと数字ブロックに分割されます。文字ブロックは英数字順に比較され、数字ブロックは数値順に比較されます(つまり、先頭のゼロはスキップされ、桁数が多いほど大きい値となり、そうでない場合は左端の異なる桁で結果が決定されます)。ブロックは左から右に比較され、そのループ内で最初の等しくないブロックによって、どちらのテキストが大きいかが決定されます。これは、IPアドレス、Debianパッケージのバージョン文字列、および文字列に可変長の数値が埋め込まれている同様のタスクで機能します。
$'string'形式の単語は特別な扱いを受けます。この単語は文字列に展開され、バックスラッシュでエスケープされた文字はANSI C標準の規定に従って置換されます。
$'...' 文字列リテラル構文は、スクリプト内で特殊文字を入力する際の問題を解決するためにksh93に追加されました。ANSI-C規則に従って、'...' と '...' の間の文字列を変換します。