3-3-08-2 sort ログ、設定の調べ方 Linux

確認したバージョン

$sort --version
sort (GNU coreutils) 8.4
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later .
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Mike Haertel and Paul Eggert.

sort コマンドは、並べ替えをします。

$cat tmp01 
9
7
ab
1
b
2
5
a
5
0
7
01
6
00
14

オプション指定のない場合、文字として扱い、昇順に並び替える。

$sort tmp01 
0
00
01
1
14
2
5
5
6
7
7
9
a
ab
b

逆順にする。( r オプション)

$sort -r tmp01 
b
ab
a
9
7
7
6
5
5
2
14
1
01
00
0

$cat tmp02
江戸川 乱歩:えどがわ らんぽ:人間椅子
江戸川 乱歩:えどがわ らんぽ:蜘蛛男
泡坂 妻夫:あわさか つまお:しあわせの書
泡坂 妻夫:あわさか つまお:蔭桔梗
香山 滋:かやま しげる:海鰻荘奇談
香山 滋:かやま しげる:オラン・ペンデクの復讐
江戸川 乱歩:えどがわ らんぽ:人間豹
香山 滋:かやま しげる:ゴジラ
横溝 正史:よこみぞ せいし:獄門島
横溝 正史:よこみぞ せいし:本陣殺人事件
泡坂 妻夫:あわさか つまお:11枚のとらんぷ
江戸川 乱歩:えどがわ らんぽ:火星の運河
香山 滋:かやま しげる:月ぞ悪魔
横溝 正史:よこみぞ せいし:羽子板娘
泡坂 妻夫:あわさか つまお:亜愛一郎の冒険
横溝 正史:よこみぞ せいし:怖ろしき四月馬鹿

区切り文字の変更( t オプション)、並べ替えに使用する項目の指定( k オプション)
区切り文字を「:」として、2つめの項目(例では、ひらがな)で並べ替える。

$sort -t: -k2 tmp02
泡坂 妻夫:あわさか つまお:11枚のとらんぷ
泡坂 妻夫:あわさか つまお:しあわせの書
泡坂 妻夫:あわさか つまお:亜愛一郎の冒険
泡坂 妻夫:あわさか つまお:蔭桔梗
江戸川 乱歩:えどがわ らんぽ:火星の運河
江戸川 乱歩:えどがわ らんぽ:人間椅子
江戸川 乱歩:えどがわ らんぽ:人間豹
江戸川 乱歩:えどがわ らんぽ:蜘蛛男
香山 滋:かやま しげる:オラン・ペンデクの復讐
香山 滋:かやま しげる:ゴジラ
香山 滋:かやま しげる:海鰻荘奇談
香山 滋:かやま しげる:月ぞ悪魔
横溝 正史:よこみぞ せいし:羽子板娘
横溝 正史:よこみぞ せいし:獄門島
横溝 正史:よこみぞ せいし:怖ろしき四月馬鹿
横溝 正史:よこみぞ せいし:本陣殺人事件

数字として並べ替える。( n オプション)

$sort -n tmp01
0
00
a
ab
b
01
1
2
5
5
6
7
7
9
14

重複した行を表示しない。( u オプション)
重複した行は、一番最初の行が表示される。

$sort -n -u tmp01
ab
1
2
5
6
7
9
14

k オプションは、-k POS1[,POS2] という形式で、POS1からPOS2までを対象とする。POS2の指定がなければ、POS1以降全てが対象。

$sort -u -k2,2 tmp02
泡坂 妻夫:あわさか つまお:しあわせの書
香山 滋:かやま しげる:海鰻荘奇談
横溝 正史:よこみぞ せいし:獄門島
江戸川 乱歩:えどがわ らんぽ:人間椅子

ナチュラルな、数値ソート( V オプション)
対象をバージョン表記的に見なす。

$sort -V tmp01
0
00
01
1
2
5
5
6
7
7
9
14
a
ab
b
$cat tmp03
112.2.4.6
12.35.6.6
12.35.6.55
2.5.7.6
2.55.7.6
23.4.5.8
2.44.3.168
$sort -V tmp03
2.5.7.6
2.44.3.168
2.55.7.6
12.35.6.6
12.35.6.55
23.4.5.8
112.2.4.6
$sort -n tmp04
12
256
1,000
1001
2000
$sort -V tmp04
1,000
12
256
1001
2000
$sort --help
Usage: sort [OPTION]... [FILE]...
  or:  sort [OPTION]... --files0-from=F
Write sorted concatenation of all FILE(s) to standard output.

長いオプションに必須の引数は短いオプションにも必須です.
Ordering options:

  -b, --ignore-leading-blanks  ignore leading blanks
  -d, --dictionary-order      consider only blanks and alphanumeric characters
  -f, --ignore-case           fold lower case to upper case characters
  -g, --general-numeric-sort  compare according to general numerical value
  -i, --ignore-nonprinting    consider only printable characters
  -M, --month-sort            compare (unknown)  `JAN'  ...  `DEC'
  -h, --human-numeric-sort    compare human readable numbers (e.g., 2K 1G)
  -n, --numeric-sort          compare according to string numerical value
  -R, --random-sort           sort by random hash of keys
      --random-source=FILE    get random bytes from FILE
  -r, --reverse               reverse the result of comparisons
      --sort=WORD             sort according to WORD:
                                general-numeric -g, human-numeric -h, month -M,
                                numeric -n, random -R, version -V
  -V, --version-sort          natural sort of (version) numbers within text

Other options:

      --batch-size=NMERGE   merge at most NMERGE inputs at once;
                            for more use temp files
  -c, --check, --check=diagnose-first  check for sorted input; do not sort
  -C, --check=quiet, --check=silent  like -c, but do not report first bad line
      --compress-program=PROG  compress temporaries with PROG;
                              decompress them with PROG -d
      --files0-from=F       read input from the files specified by
                            NUL-terminated names in file F;
                            If F is - then read names from standard input
  -k, --key=POS1[,POS2]     start a key at POS1 (origin 1), end it at POS2
                            (default end of line)
  -m, --merge               merge already sorted files; do not sort
  -o, --output=FILE         write result to FILE instead of standard output
  -s, --stable              stabilize sort by disabling last-resort comparison
  -S, --buffer-size=SIZE    use SIZE for main memory buffer
  -t, --field-separator=SEP  use SEP instead of non-blank to blank transition
  -T, --temporary-directory=DIR  use DIR for temporaries, not $TMPDIR or /tmp;
                              multiple options specify multiple directories
  -u, --unique              with -c, check for strict ordering;
                              without -c, output only the first of an equal run
  -z, --zero-terminated     文字列の最後に改行でなくヌル文字を付加
      --help     この使い方を表示して終了
      --version  バージョン情報を表示して終了

POS is F[.C][OPTS], where F is the field number and C the character position
in the field; both are origin 1.  If neither -t nor -b is in effect, characters
in a field are counted from the beginning of the preceding whitespace.  OPTS is
one or more single-letter ordering options, which override global ordering
options for that key.  If no key is given, use the entire line as the key.

SIZE may be followed by the following multiplicative suffixes:
メモリの % 1%, b は 1, K は 1024 (標準) のように M, G, T, P, E, Z, T.

*** 警告 ***
環境変数によって指定されたロカールで並び替えの順番が変わります.
本来のバイト単位の数値で昔ながらの並び替え順にしたいならば LC_ALL=C を指定.

Report sort bugs to bug-coreutils@gnu.org
GNU coreutils home page: 
General help using GNU software: 
Report sort translation bugs to 
For complete documentation, run: info coreutils 'sort invocation'
$man sort
SORT(1)                                                                SORT(1)

名前
       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     入力における行の末尾が、 (ラインフィード) ではなく  (ゼロバイト文字) で終了するとみなす。このオプションは ‘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  が作成しました。



GNU textutils 2.1               7 October 2002                         SORT(1)