このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

Linuxコマンドの基本:行を並べ替える:sortコマンド

行を並べ替える:sortコマンド

 Linuxシステムを管理する際、テキストデータを効率的に処理することは非常に重要です。その中で、テキストファイルの行を特定の規則に基づいて並べ替えることができる sort コマンド は、データの整理や解析に欠かせないツールです。

sortコマンドの概要

 sort は、テキストファイルの行を並べ替えるためのコマンドです。デフォルトでは、各行を辞書順(アルファベット順)に比較してソートしますが、オプションを使用することで、数値順や特定のフィールドに基づいた並べ替えなど、さまざまな方法で行を整理することができます。

基本的な使い方

【書式】
sort [オプション] ファイル名

  • ファイル名:並べ替えたいテキストファイルを指定します。
  • オプション:ソート方法を指定するための各種オプションがあります。

実例:アルファベット順のソート

 まず、次のような内容の file というファイルをnanoエディタなどのテキストエディタで作成します。

user01@ubuntu-vm:~$ nano file

file の内容

Apple
Banana
Orange
Grape
Pineapple
Strawberry
Watermelon
Mango
Peach
Lemon

アルファベット順にソート

sort コマンドを使用して、このファイルをアルファベット順に並べ替えます。

user01@ubuntu-vm:~$ sort file
Apple
Banana
Grape
Lemon
Mango
Orange
Peach
Pineapple
Strawberry
Watermelon

説明

 デフォルトでは、sort コマンドは各行を先頭から文字列として比較し、アルファベット順に並べ替えます。

特定のフィールドでのソート:-k オプション

 コマンドの出力結果を特定の列(フィールド)に基づいてソートすることができます。ここでは、ps コマンドの出力を例に説明します。

ps コマンドの出力

user01@ubuntu-vm:~$ ps x
  PID TTY      STAT   TIME COMMAND
 2325 ?        Ss     0:00 /lib/systemd/systemd --user
 2326 ?        S      0:00 (sd-pam)
 2332 ?        Ssl    0:00 /usr/bin/pipewire
 2333 ?        Ssl    0:00 /usr/bin/pipewire-media-session
...(以下省略)...

各フィールドの説明

  • PID:プロセスID(第1フィールド)
  • TTY:端末(第2フィールド)
  • STAT:プロセスの状態(第3フィールド)
  • TIME:CPU時間(第4フィールド)
  • COMMAND:実行されているコマンド(第5フィールド)

COMMANDフィールドでのソート

COMMAND フィールド(第5フィールド)を基に行を並べ替えるには、-k オプションを使用します。

user01@ubuntu-vm:~$ ps x | sort -k 5
 2326 ?        S      0:00 (sd-pam)
 2325 ?        Ss     0:00 /lib/systemd/systemd --user
 2601 ?        Ssl    0:00 /snap/snapd-desktop-integration/10/bin/snapd-desktop-integration
...(以下省略)...

説明

  • -k 5:第5フィールドをキーとしてソートします。
  • 注意点:大文字・小文字や特殊文字の順序は、ASCIIコード順で処理されます。

ASCIIコード順の影響

ASCIIコード:文字を数値で表現するコード体系。
  • 大文字:A(65)〜Z(90)
  • 小文字:a(97)〜z(122)

影響

sort コマンドはASCIIコード順に並べ替えるため、大文字と小文字で順序が異なります。

数値順にソート:-n オプション

数値データを正しく並べ替えるには、-n オプションを使用します。

例:数値のソート

 次の内容(1~15までの数値)の number.txt ファイルをnanoエディタなどのテキストエディタ作成します。

user01@ubuntu-vm:~$ nano number.txt

number.txt の内容

14
5
11
6
15
7
2
13
9
10
1
8
12
3
4

オプションなしのソート

問題点

数値を文字列として評価するため、10 の方が 2 よりも前に並びます。

user01@ubuntu-vm:~$ sort number.txt
1
10
11
12
13
14
15
2
3
4
5
6
7
8
9

数値順でのソート

user01@ubuntu-vm:~$ sort -n number.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

説明

-n オプションにより、各行を数値として評価して正しく並べ替えます。

逆順にソート:-r オプション

デフォルトの昇順ではなく、降順で並べ替える場合は -r オプションを使用します。

例:アルファベットの逆順ソート

user01@ubuntu-vm:~$ sort -r file
Watermelon
Strawberry
Pineapple
Peach
Orange
Mango
Lemon
Grape
Banana
Apple

説明

-r オプションで、逆順(降順)にソートされます。

数値の逆順ソート

-n-r を組み合わせて、数値データを降順に並べ替えます。

user01@ubuntu-vm:~$ sort -rn number.txt
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1

ファイルサイズでのソート

ls -l コマンドの出力をファイルサイズで並べ替える例です。

user01@ubuntu-vm:~$ ls -l /bin/ | sort -rn -k 5
-rwxr-xr-x 1 root root 15815640 Apr 21 2022 snap
-rwxr-xr-x 1 root root 10280648 Mar 22 2022 gdb
-rwxr-xr-x 1 root root 8334360 Apr 20 2022 gtk4-encode-symbolic-svg
...(以下省略)...

説明

  • -k 5:第5フィールド(ファイルサイズ)でソート。
  • -rn:数値として逆順にソート。

不要なファイルの削除

作成したファイルを削除します。

user01@ubuntu-vm:~$ rm file number.txt

まとめ

  • sort コマンドは、テキストファイルの行を並べ替えるための強力なツールです。
  • 主なオプション
    -k:特定のフィールドでソート。
    -n:数値順にソート。
    -r:逆順にソート。
  • 注意点:デフォルトではASCIIコード順で並べ替えられるため、大文字・小文字の順序に注意が必要です。
  • 応用sort コマンドを他のコマンドと組み合わせることで、データの解析や整理が効率的に行えます。

 sort コマンドを活用することで、システム管理やデータ処理がより効率的になります。日常の業務でぜひ活用してみてください。