【sort】Linuxコマンド_ファイル内のデータの行の順番を並べ替える

テキストファイル内のデータの各行を並べ替え(ソート)をするには「sort」コマンドを実行します。




↓↓↓ITエンジニアのおすすめ学習・開発環境の詳細へ↓↓↓

「sort」コマンドの使い方(Linux)

「sort」コマンドはテキストファイル内のデータを並び替えて表示します。

以下のように「sort_test01」というファイルのデータがあります。
それぞれ各業に文字列や数字が設定されています。

$ cat sort_test01 
test03 3 2 1
test01 60 50 40
test02 9 80 70
y b e c n m
z a h g i k

「sort」コマンド指定したファイルの各業の全ての「フィールド」を対象に変えて表示します。

この「フィールド」は「スペース」や「タブ」で区切られたテキストの部分となります。

$ sort sort_test01 
test01 60 50 40
test02 9 80 70
test03 3 2 1
y b e c n m
z a h g i k

「sort」コマンドのデフォルトの並び替えルール

並び替えのルールは以下となります。

  • 数字:数の小さい順に並び替え
  • アルファベット:アルファベット順に並び替え
  • 数字とアルファベットは数字が上位表示として優先される

2桁以上の数字を「sort」する場合は「-n」オプションを使用する

以下のように数字のデータをソートする際、デフォルトだとアルファベット順となってしまいますので、「6」、「8」、「11」より、「101」が先に並び替えられます。

$ sort sort_test02
101 1
11 777
333 22
6 1000
666 555
8 5
999 182

このように2桁以上の数字で並び替えをする際は「-n」オプションを使用します。

$  sort -n sort_test02
6 1000
8 5
11 777
101 1
333 22
666 555
999 182

ちなみに「-n」オプションを使用すると、アルファベットが上位表示となります。

$ sort -n sort_test02
a test2
o test1
6 1000
8 5
11 777
101 1
333 22
666 555
999 182

「sort」コマンド「フィールド」指定した並び替え

以下では、「sort」コマンドを使用して、「フィールド1」を指定した並べ替えをした実行例となります。

$ sort -n -k 1 sort_test01
test01 60 50 40
test02 9 80 70
test03 3 2 1
y b e c n m
z a h g i k

アルファベット順に並び替えられ、同じ文字列に対しては数字の小さい方が優先で上位表示されています。

「フィールド2」を指定した並び替え

以下はスペース区切りで2番目のフィールドを指定して「sort」を表示した例となります。
「-n」で数字を指定し、「3」の数字が上位に表示されるようになります。

$  sort -n -k 2 sort_test03
test03 3 2 1
test02 9 80 70
test01 60 50 40

「sort」を逆に表示

以下は「sort」の昇降順を逆に表示した例となります。
2番目のフィールドで一番大きな数字の「60」が上位表示されています。

$  sort -r -n -k 2 sort_test3
test01 60 50 40
test02 9 80 70
test03 3 2 1

「sort」コマンドでフィールドの文字区切りを指定

以下のようにIPアドレスのテキストファイルのデータがあります。

$ cat ip_address 
10.1.1.100
192.168.3.1
172.17.0.10
10.1.1.2
11.1.2.2
10.1.1.15

このデータを数字の小さな順から「sort」をかけると以下のように数字の小さな順から並び替えることができません。

$ sort ip_address 
10.1.1.100
10.1.1.15
10.1.1.2
11.1.2.2
172.17.0.10
192.168.3.1

デフォルトのフィールドの区切りは「スペース」や「タブ」を今回は「.」ドット区切りで並び替えるようにします。

以下はIPアドレスの第1オクテット〜第4オクテットの順で数字の小さい方から上位表示した例となります。

$ sort -t'.' -k1,1n -k2,2n -k3,3n -k4,4n ip_address 
10.1.1.2
10.1.1.15
10.1.1.100
11.1.2.2
172.17.0.10
192.168.3.1

「sort」コマンドオプション

sortコマンドのオプションは以下の通りとなります。

$ sort --help
使用法: sort [OPTION]... [FILE]...
または: sort [OPTION]... --files0-from=F
Write sorted concatenation of all FILE(s) to standard output.

FILE の指定がなかったり, - であった場合, 標準入力から読み込みます.

Mandatory arguments to long options are mandatory for short options too.
並び替えオプション:

  -b, --ignore-leading-blanks  先頭の空白を無視する
  -d, --dictionary-order      空白および英数字のみ含まれていると仮定する
  -f, --ignore-case           大文字・小文字を区別しない
  -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    人間が読むことができる形式の数値を比較する (例: 2K 1G)
  -n, --numeric-sort          compare according to string numerical value
  -R, --random-sort           shuffle, but group identical keys.  See shuf(1)
      --random-source=FILE    get random bytes from FILE
  -r, --reverse               reverse the result of comparisons
      --sort=WORD             WORD に応じてソートする。WORD の候補は次の通り:
                                general-numeric -g, human-numeric -h, month -M,
                                numeric -n, random -R, version -V
  -V, --version-sort          自然な (バージョン) 数字順でソートする

そのほかのオプション:

      --batch-size=NMERGE   一度に最大 NMERGE 行、併合を行う。それ以上の場合
                            は一時ファイルが使用される
  -c, --check, --check=diagnose-first  入力がソートされているかを確認する。ソート
                                       は行わない
  -C, --check=quiet, --check=silent  -c と同様だが、正しくソートされていない最初
                                     の行を出力しない
      --compress-program=PROG  PROG を使用して一時ファイルを圧縮し、PROG -d を
                              使用して展開する
      --debug               ソートに使用されている行の一部に注釈をつけて、不確かな
                              使用方法について標準エラー出力に警告を表示する
      --files0-from=F       ファイル F に含まれた NULL 文字で区切られた文字列を
                            ファイル名として扱い、それらのファイルの中身を入力行
                            として読み込む。ファイル F に - を指定した時は、ファ
                            イル名を標準入力から読み込む
  -k, --key=KEYDEF          sort via a key; KEYDEF gives location and type
  -m, --merge               merge already sorted files; do not sort
  -o, --output=FILE         結果を標準出力の代わりに FILE に書き込む
  -s, --stable              前の比較結果に頼らない安定的な並び替えを行う
  -S, --buffer-size=SIZE    主記憶のバッファの大きさとして SIZE を使用する
  -t, --field-separator=SEP フィールド区切り文字として空白の代わりに SEP を使用する
  -T, --temporary-directory=DIR  一時ディレクトリとして $TMPDIR または /tmp ではなく
                              DIR を使用する。オプションを複数指定すると、複数のディ
                              レクトリを指定できる
      --parallel=N          同時に実行するソートの数を N に変更する
  -u, --unique              -c と併せて使用した場合、厳密に順序を確認する。-c を付け
                              ずに使用した場合、最初の同一行のみ出力する
  -z, --zero-terminated     line delimiter is NUL, not newline
      --help     この使い方を表示して終了する
      --version  バージョン情報を表示して終了する

KEYDEF is F[.C][OPTS][,F[.C][OPTS]] for start and stop position, where F is a
field number and C a character position in the field; both are origin 1, and
the stop position defaults to the line's end.  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 [bdfgiMhnRrV],
which override global ordering options for that key.  If no key is given, use
the entire line as the key.  Use --debug to diagnose incorrect key usage.

SIZE may be followed by the following multiplicative suffixes:
% 1% of memory, b 1, K 1024 (default), and so on for M, G, T, P, E, Z, Y.

*** WARNING ***
The locale specified by the environment affects sort order.
Set LC_ALL=C to get the traditional sort order that uses
native byte values.

GNU coreutils online help: <https://www.gnu.org/software/coreutils/>
Report sort translation bugs to <https://translationproject.org/team/>
Full documentation at: <https://www.gnu.org/software/coreutils/sort>
or available locally via: info '(coreutils) sort invocation'

「sort」コマンドの使い方は以上となります。

エンジニアのオンライン学習

エンジニアにおすすめのオンライン教材比較
ITエンジニアが自宅で学習ができるオンラインスクール比較

エンジニアのおすすめ学習「Progate」と「Udemy」比較

VPS_比較
最新情報をチェックしよう!