【Linuxコマンド】sort コマンドの使い方とよく使うオプション

概要

 
sort コマンドは、テキストファイルの行を並び替えるためのコマンドです。
デフォルトでは、行全体を文字列として比較し、辞書順(文字コード順)にソートします。
 

オプションを組み合わせることで、

  • 数値として並び替える(-n
  • 逆順に並び替える(-r
  • 区切り文字と列(フィールド)を指定してソートする(-t, -k
  • 重複行をまとめて扱う(-u
  • バージョン番号やサイズとして解釈してソートする(-V, -h

など、ログ解析や一覧データ処理で便利な並び替えができます。
 

フォーマット

 

sort [オプション] [ファイル...]

 

ファイルを指定しない場合は標準入力から読み込み、ソート結果を標準出力に出力します。
複数ファイルを指定した場合は、それらを連結した内容をまとめてソートします。

sort 単体でも使えますが、grepawkuniq などと組み合わせることで、ログ解析やレポート作成がかなり楽になります。

 

よく使うコマンド例

 

・ファイルを行単位でソートする(基本)

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 が何回アクセスしているか」を集計する例です。
sortuniq -csort -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 -usort | uniq -d で簡単な確認ができます。
 

・サイズやバージョンの直感的な並び替え
「どのファイルが一番大きいか」「バージョンの順番を正しく並べたい」といった場合に、
-h-V を知っていると、単純な文字列ソートよりも実務に即した結果が得られます。
 

sort は一見シンプルですが、-n / -r / -t / -k / -u / -V / -h あたりを押さえるだけでも、
ログ解析やテキスト処理の効率がかなり変わってきます。
まずは「文字列ソート」「数値ソート」「列指定ソート」の 3 つを手に馴染ませるのがオススメです。

 

オプション(よく使うオプションのみ)

 

short optionlong optiondescription
-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-sort1K 1M 1G のような人間向けサイズ表記を解釈してソートする
-s--stable安定ソートを行い前のキーと同じ場合に元の順序を保持する
-m--merge既にソート済みの複数ファイルをマージする(マージソート)
-o--outputソート結果を指定したファイルに出力する(例: -o output.txt)
-T--temporary-directoryソート時に一時ファイルを置くディレクトリを指定する
-c--check入力が既にソート済みかどうかをチェックしソートされていない場合に報告する
-C--check=quiet入力がソート済みか静かに確認しソートされていない場合に終了コードでのみ通知する
--parallelソートに使用するスレッド数を指定する(マルチコア環境で高速化したい場合に使用)
--buffer-sizeソートに使用するバッファサイズを指定する
--debugソートに利用しているキーや比較情報を含むデバッグ出力を行う
-h--helpsort コマンドの使い方(ヘルプ)を表示して終了する
--versionsort コマンドのバージョン情報を表示して終了する
 

ここでは GNU coreutils の sort コマンドで、実務でよく使われる主なオプションだけを TablePress の表としてまとめている想定です。
実際に利用できるオプションや挙動は、ディストリビューションやバージョンによって異なる場合があるため、
本番環境で使用する前に man sort で最新の仕様を確認してください。

ブログランキングに参加しています。クリックして応援していただけると嬉しいです。




人気ブログランキング


ブログランキング・にほんブログ村へ

にほんブログ村