sort コマンドは、テキストファイルの行を並び替えるためのコマンドです。
デフォルトでは、行全体を文字列として比較し、辞書順(文字コード順)にソートします。
オプションを組み合わせることで、
- 数値として並び替える(
-n) - 逆順に並び替える(
-r) - 区切り文字と列(フィールド)を指定してソートする(
-t,-k) - 重複行をまとめて扱う(
-u) - バージョン番号やサイズとして解釈してソートする(
-V,-h)
など、ログ解析や一覧データ処理で便利な並び替えができます。
sort [オプション] [ファイル...]
ファイルを指定しない場合は標準入力から読み込み、ソート結果を標準出力に出力します。
複数ファイルを指定した場合は、それらを連結した内容をまとめてソートします。
sort 単体でも使えますが、grep・awk・uniq などと組み合わせることで、ログ解析やレポート作成がかなり楽になります。
・ファイルを行単位でソートする(基本)
sort names.txt
names.txt の各行を、文字列として昇順にソートして表示します。
アルファベット順・辞書順で並び替えたいときの基本形です。
・逆順(降順)にソートする(-r)
sort -r names.txt
-r(–reverse)は、逆順(降順)に並び替えます。
数値ソート(-n)と組み合わせて「大きい順」にすることもできます。
・数値としてソートする(-n)
sort -n scores.txt
-n(–numeric-sort)は、数値として比較してソートします。
文字列ソートだと「2, 10, 100, 20」のような並びになりますが、-n を付けると数値として正しく「2, 10, 20, 100」の順になります。
・数値を大きい順にソートする(-n -r)
sort -n -r scores.txt
-n と -r を組み合わせることで、数値を大きい順に並べられます。
ランキングや上位 N 件の抽出などでよく使います。
・区切り文字と列(フィールド)を指定してソートする(-t, -k)
sort -t ',' -k 2,2 users.csv
-t で区切り文字(フィールドセパレータ)を指定し、-k でソートのキーとなる列を指定します。
この例では、カンマ区切り CSV の 2 列目をキーに昇順ソートします。
・3列目を数値として昇順にソートする
sort -t ',' -k 3,3n data.csv
-k 3,3n のように書くと、「3 列目のみを数値としてソート」のように細かく指定できます。
「指定列だけ数値ソート」「他の列は表示したいだけ」というケースで便利です。
・区切り文字が「:」のファイルを 3 列目でソートする(/etc/passwd など)
sort -t ':' -k 3,3 /etc/passwd
/etc/passwd のようなコロン区切りファイルでは、-t ':' と -k の組み合わせで列ごとのソートが簡単にできます。
ユーザ ID、ホームディレクトリなど、任意のフィールドで並び替えたいときに使います。
・重複行をまとめて 1 行にする(-u)
sort -u list.txt
-u(–unique)は、ソートと同時に重複行を削除して一意な行だけを出力します。
元データの順序は失われますが、「ユニーク値一覧が欲しい」場合には手軽な方法です。
・出現回数付きで集計して上位を確認する(sort + uniq + sort)
sort access_ip.txt | uniq -c | sort -n -r | head
アクセス元 IP の一覧から、「どの IP が何回アクセスしているか」を集計する例です。
sort → uniq -c → sort -n -r の流れは、ログ解析で非常によく使う定番パターンです。
・バージョン番号としてソートする(-V)
sort -V versions.txt
-V(–version-sort)は、バージョン番号を人間が期待する順にソートします。
例えば 1.9.9, 1.10.0, 2.0.0 のような並び替えをしたいときに役立ちます。
・サイズ表記(1K, 5M など)を人間向けにソートする(-h)
ls -lh /var/log | sort -k 5,5h
-h(–human-numeric-sort)は、「1K, 5M, 2G」のような人間向けサイズ表記を解釈してソートします。
ls -lh の 5 列目(サイズ)を sort -k 5,5h で並び替えると、「サイズの小さい順/大きい順」を直感的に確認できます。
・安定ソートで他のキーとの組み合わせを制御する(-s)
sort -k 2,2 -s -k 1,1 data.txt
-s(–stable)は安定ソートを指定し、「前のキーと同じ場合に元の順序を保つ」ことを保証します。
複数キーで順序を制御したいときに使います(やや高度な使い方ですが、知っておくと便利です)。
・ソート結果を指定したファイルに出力する(-o)
sort -n -o sorted.txt numbers.txt
-o ファイル名 で、ソート結果の出力先ファイルを指定できます。
入力ファイルと同じファイルを指定して「上書きソート」することも可能ですが、
万一に備えて別ファイルに出力してから差し替える方が安全です。
・ログやアクセス元の集計
IP アドレス一覧や URL 一覧を sort で並び替え、uniq と組み合わせて出現回数を数えるのは定番です。
「どの IP が多いか」「どの URL へのアクセスが多いか」をざっくり把握できます。
・CSV や一覧データの並び替え
CSV や区切り付きテキストの並び替えに、-t と -k の組み合わせは非常に便利です。
データベースに投入する前の検証や、簡易レポート作成にも向いています。
・設定ファイルや一覧の重複確認
ホスト一覧・ユーザ一覧などに重複が紛れ込んでいないかをチェックする場合、
sort -u や sort | uniq -d で簡単な確認ができます。
・サイズやバージョンの直感的な並び替え
「どのファイルが一番大きいか」「バージョンの順番を正しく並べたい」といった場合に、
-h や -V を知っていると、単純な文字列ソートよりも実務に即した結果が得られます。
sort は一見シンプルですが、-n / -r / -t / -k / -u / -V / -h あたりを押さえるだけでも、
ログ解析やテキスト処理の効率がかなり変わってきます。
まずは「文字列ソート」「数値ソート」「列指定ソート」の 3 つを手に馴染ませるのがオススメです。
| short option | long option | description |
|---|---|---|
| -b | --ignore-leading-blanks | 行頭の空白文字を無視して比較する(インデント差を無視してソートしたい場合に使用) |
| -f | --ignore-case | 大文字小文字の違いを無視して比較する |
| -n | --numeric-sort | 文字列ではなく数値として比較してソートする |
| -r | --reverse | ソート結果を逆順(降順)で出力する |
| -u | --unique | 重複行を削除し一意な行だけを出力する(ソートと同時に重複排除) |
| -k | --key | ソートに使用するキー(フィールド)を指定する(例: -k 2,2 や -k 3,3n) |
| -t | --field-separator | フィールドの区切り文字を指定する(例: -t ',') |
| -M | --month-sort | 月名(Jan, Feb, ...)を含む文字列を月順にソートする |
| -V | --version-sort | 文字列をバージョン番号として解釈し人間が期待する順序でソートする |
| -h | --human-numeric-sort | 1K 1M 1G のような人間向けサイズ表記を解釈してソートする |
| -s | --stable | 安定ソートを行い前のキーと同じ場合に元の順序を保持する |
| -m | --merge | 既にソート済みの複数ファイルをマージする(マージソート) |
| -o | --output | ソート結果を指定したファイルに出力する(例: -o output.txt) |
| -T | --temporary-directory | ソート時に一時ファイルを置くディレクトリを指定する |
| -c | --check | 入力が既にソート済みかどうかをチェックしソートされていない場合に報告する |
| -C | --check=quiet | 入力がソート済みか静かに確認しソートされていない場合に終了コードでのみ通知する |
| --parallel | ソートに使用するスレッド数を指定する(マルチコア環境で高速化したい場合に使用) | |
| --buffer-size | ソートに使用するバッファサイズを指定する | |
| --debug | ソートに利用しているキーや比較情報を含むデバッグ出力を行う | |
| -h | --help | sort コマンドの使い方(ヘルプ)を表示して終了する |
| --version | sort コマンドのバージョン情報を表示して終了する |
ここでは GNU coreutils の sort コマンドで、実務でよく使われる主なオプションだけを TablePress の表としてまとめている想定です。
実際に利用できるオプションや挙動は、ディストリビューションやバージョンによって異なる場合があるため、
本番環境で使用する前に man sort で最新の仕様を確認してください。
新着情報
ブログランキングに参加しています。クリックして応援していただけると嬉しいです。
