はじめに

こんにちは!今回はsortコマンドについて解説します。

sortは、テキストファイルの行を並べ替えるコマンドです。アルファベット順、数値順、逆順など、様々な並べ替えができます。データ整理に欠かせないコマンドです。

sortコマンドとは

sortは、テキストの各行をソート(並べ替え)するコマンドです。

デフォルトでは辞書順(アルファベット順)にソートしますが、数値として扱ったり、特定の列でソートしたり、重複を削除したりもできます。ログ解析やデータ処理で超よく使います。

基本構文

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

主なオプション

オプション 説明
-r 逆順(降順)にソート
-n 数値としてソート
-h 人間が読みやすいサイズ単位でソート(K, M, Gなど)
-k フィールド 指定した列(フィールド)でソート
-t 区切り文字 フィールドの区切り文字を指定
-u 重複行を削除(uniqと同じ)
-f 大文字小文字を区別しない
-b 先頭の空白を無視
-o ファイル 結果をファイルに出力
-c ソート済みかチェック
-M 月名でソート(Jan, Feb…)

使用例

例1: 基本的なソート

1
2
3
4
5
6
# names.txt の内容
# Charlie
# Alice
# Bob

sort names.txt

実行結果:

1
2
3
Alice
Bob
Charlie

アルファベット順(昇順)にソートされます。

例2: 逆順(降順)にソート

1
sort -r names.txt

実行結果:

1
2
3
Charlie
Bob
Alice

例3: 数値としてソート

1
2
3
4
5
6
# numbers.txt の内容
# 100
# 20
# 3

sort numbers.txt

実行結果(文字列ソート):

1
2
3
100
20
3

文字列として比較されるので、“100"が最初に来ます。

1
sort -n numbers.txt

実行結果(数値ソート):

1
2
3
3
20
100

-nオプションで数値として正しくソートされます。

例4: 人間が読みやすいサイズでソート

1
2
3
4
5
6
7
# sizes.txt の内容
# 1K
# 100M
# 5G
# 200K

sort -h sizes.txt

実行結果:

1
2
3
4
1K
200K
100M
5G

サイズ単位(K, M, G)を理解してソートします。

例5: 特定の列(フィールド)でソート

1
2
3
4
5
6
# users.txt の内容(スペース区切り)
# Alice 30 Tokyo
# Bob 25 Osaka
# Charlie 35 Kyoto

sort -k 2 -n users.txt

実行結果:

1
2
3
Bob 25 Osaka
Alice 30 Tokyo
Charlie 35 Kyoto

2列目(年齢)でソート。

1
sort -k 3 users.txt

実行結果:

1
2
3
Charlie 35 Kyoto
Bob 25 Osaka
Alice 30 Tokyo

3列目(都市名)でソート。

例6: カンマ区切り(CSV)のソート

1
2
3
4
5
6
# data.csv の内容
# Alice,30,Tokyo
# Bob,25,Osaka
# Charlie,35,Kyoto

sort -t ',' -k 2 -n data.csv

実行結果:

1
2
3
Bob,25,Osaka
Alice,30,Tokyo
Charlie,35,Kyoto

-t ','でカンマ区切りを指定し、2列目でソート。

例7: 重複行を削除

1
2
3
4
5
6
7
8
# duplicates.txt の内容
# apple
# banana
# apple
# orange
# banana

sort -u duplicates.txt

実行結果:

1
2
3
apple
banana
orange

ソートしながら重複を削除します。

例8: 大文字小文字を区別しない

1
2
3
4
5
6
7
# mixed.txt の内容
# apple
# Banana
# CHERRY
# apricot

sort -f mixed.txt

実行結果:

1
2
3
4
apple
apricot
Banana
CHERRY

大文字小文字を無視してソート。

例9: 複数のキーでソート

1
2
3
4
5
6
7
# scores.txt の内容
# Math Alice 90
# Math Bob 85
# English Alice 95
# English Bob 80

sort -k 1,1 -k 3,3nr scores.txt

実行結果:

1
2
3
4
English Alice 95
English Bob 80
Math Alice 90
Math Bob 85

1列目でソート後、3列目で数値の降順ソート。

例10: ソート結果をファイルに保存

1
sort names.txt -o sorted_names.txt

結果をsorted_names.txtに保存します。

例11: ファイルがソート済みかチェック

1
sort -c names.txt

ソート済みなら何も出力されません。ソートされていない場合はエラーメッセージが表示されます。

例12: 月名でソート

1
2
3
4
5
6
7
# months.txt の内容
# Mar
# Jan
# Dec
# Feb

sort -M months.txt

実行結果:

1
2
3
4
Jan
Feb
Mar
Dec

月の順序を理解してソートします。

実践的な使い方

ログファイルのアクセス数集計

1
cut -d ' ' -f 1 access.log | sort | uniq -c | sort -rn | head -10

IPアドレス別のアクセス数をカウントして、トップ10を表示。

ファイルサイズでソート

1
ls -lh | tail -n +2 | sort -k 5 -h

ファイルサイズ順に表示。

CSVファイルの特定列でソート

1
sort -t ',' -k 3 -n data.csv > sorted_data.csv

3列目で数値ソートして新しいファイルに保存。

プロセスをメモリ使用量でソート

1
ps aux | tail -n +2 | sort -k 4 -rn | head -10

メモリ使用量の多いプロセストップ10。

日付でソート

1
2
3
4
5
6
# dates.txt の内容
# 2024-01-15
# 2024-01-03
# 2024-02-20

sort dates.txt

実行結果:

1
2
3
2024-01-03
2024-01-15
2024-02-20

ISO形式(YYYY-MM-DD)なら自然にソートされます。

重複行のカウント

1
sort file.txt | uniq -c | sort -rn

各行の出現回数を数えて、多い順に表示。

複数ファイルのマージとソート

1
sort file1.txt file2.txt file3.txt > merged_sorted.txt

複数ファイルを結合してソート。

特定の範囲でソート

1
2
3
4
5
6
# data.txt の内容
# ID:001 Name:Alice Score:90
# ID:003 Name:Bob Score:85
# ID:002 Name:Charlie Score:95

sort -t ':' -k 2 data.txt

コロンを区切りとして2番目のフィールドでソート。

バージョン番号のソート

1
2
3
4
5
6
# versions.txt の内容
# v1.10
# v1.2
# v1.9

sort -V versions.txt

実行結果:

1
2
3
v1.2
v1.9
v1.10

-Vオプションでバージョン番号を正しくソート。

ランダムにシャッフル

1
sort -R names.txt

行をランダムに並べ替えます。

Tips・注意点

  • 数値ソートには-n: 文字列ソートと数値ソートは結果が異なる

    1
    2
    
    sort numbers.txt    # 文字列ソート
    sort -n numbers.txt # 数値ソート
    
  • 元のファイルを上書きしない: >でリダイレクトすると空になる

    1
    2
    
    sort file.txt > file.txt  # 危険!ファイルが空になる
    sort file.txt -o file.txt # 正しい方法
    
  • 安定ソート: -sオプションで同じ値の順序を保つ

    1
    
    sort -s -k 2 file.txt
    
  • ロケールの影響: ソート順序はロケールに依存

    1
    
    LC_ALL=C sort file.txt  # C言語ロケールで確実なソート
    
  • 大容量ファイル: メモリが足りない場合は一時ファイルを使用

    1
    
    sort -T /tmp large_file.txt
    
  • 列の指定方法:

    1
    2
    3
    
    sort -k 2    # 2列目から行末まで
    sort -k 2,2  # 2列目のみ
    sort -k 2.3  # 2列目の3文字目から
    

sortとuniqの組み合わせ

sortuniqはセットで使うことが多いです。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 重複削除
sort file.txt | uniq

# または
sort -u file.txt

# 重複行をカウント
sort file.txt | uniq -c

# 重複行のみ表示
sort file.txt | uniq -d

まとめ

今回はsortコマンドについて解説しました。

ポイント:

  • sortでテキストの行を並べ替えられる
  • -rで逆順、-nで数値ソート
  • -kで特定の列でソート
  • -tで区切り文字を指定
  • -uで重複削除
  • -hで人間が読みやすいサイズでソート
  • uniqと組み合わせて重複処理

sortはデータ処理の基本中の基本です。ログ解析、CSV処理、集計など、あらゆる場面で使います。特にuniqとの組み合わせは覚えておくと便利ですよ。

次回もLinuxコマンドの学習を続けていきましょう!