メインコンテンツへスキップ
中級10分で読める

sortコマンドで並び替えをマスター

Linuxのsortコマンドを使って、ファイルやデータを自在に並び替える方法を解説。数値ソート、逆順、複数キーでのソートなど実践的なテクニックを紹介します。

実践編sort並び替えデータ処理テキスト処理

🎯 この記事で学べること

  • 1
    `sort`コマンドの基本的な使い方(アルファベット順、逆順)をマスターできます
  • 2
    数値ソート(-n)と人間が読みやすい形式(-h)の違いを理解できます
  • 3
    特定のフィールドを指定してソートする方法(-k)を身につけられます
  • 4
    重複の除去(-u)や大文字小文字の無視(-f)などのオプションを使えるようになります
  • 5
    他のコマンドと組み合わせた実践的なデータ処理ができるようになります

読了時間: 約10

データを思い通りに並べ替えよう!

こんにちは!今回は、データ処理の基本中の基本、sortコマンドについて学んでいきましょう。

エクセルで表を並べ替えたことはありますか?Linuxのsortコマンドは、それをコマンドラインで実現する強力なツールです。ログファイルの解析、CSVデータの整理、ランキングの作成など、いろいろな場面で大活躍しますよ!

基本的な使い方

まずはシンプルに並べ替え

sortコマンドの基本は、テキストをアルファベット順(辞書順)に並べ替えることです:

$ sort fruits.txt

実際に試してみましょう:

$ echo -e "banana\napple\ncherry" | sort
apple
banana
cherry

echo -e-eは、\nを改行として解釈するオプションです。複数行のデータを作る時に便利ですよ!

逆順で並べ替える(-rオプション)

大きい順、新しい順など、逆順で並べたい時は-r(reverse)オプションを使います:

$ echo -e "apple\nbanana\ncherry" | sort -r
cherry
banana
apple

「最新のファイルを上に表示したい」「売上の多い順に並べたい」という時は、sort -rの出番です!

数値を正しく並べ替える

文字列ソートの落とし穴

ちょっと問題があります。数字を並べ替えてみましょう:

$ echo -e "100\n20\n3" | sort
100
20
3

あれ?おかしいですね。これはsortが文字列として比較しているからです("1"は"2"や"3"より小さい)。

数値ソート(-nオプション)

数値として正しく並べ替えるには-n(numeric)オプションを使います:

$ echo -e "100\n20\n3" | sort -n
3
20
100

これで正しく並びました!

人間が読みやすい形式(-hオプション)

ファイルサイズなど、K、M、Gなどの単位が付いた数値は-h(human-readable)オプションで:

$ echo -e "1G\n500M\n2K\n100K" | sort -h
2K
100K
500M
1G

du -hls -lhの出力を並べ替える時は、必ずsort -hを使いましょう。sort -nでは正しく並びません!

🎮 理解度チェック

Q1: 次のコマンドの結果はどうなりますか?echo -e "10\n2\n100" | sort

echo -e '10\n2\n100' | sortの結果は?

特定の列で並べ替える

フィールド指定(-kオプション)

CSVファイルやスペース区切りのデータで、特定の列(フィールド)を基準に並べ替えたい時は-kオプションを使います:

# 2番目のフィールドで並べ替え
$ sort -k2 data.txt

# カンマ区切りで3番目のフィールドを数値ソート
$ sort -t',' -k3n data.csv

実例を見てみましょう:

# 社員データ(名前,年齢,部署)
$ cat employees.csv
John,25,Engineering
Alice,30,Marketing
Bob,22,Engineering
Carol,28,Sales

# 年齢(2番目)でソート
$ sort -t',' -k2n employees.csv
Bob,22,Engineering
John,25,Engineering
Carol,28,Sales
Alice,30,Marketing

-t','は区切り文字をカンマに指定しています。タブ区切りなら-t$'\t'を使いましょう!

複数の条件でソート

「部署ごとに分けて、同じ部署内は年齢順」のような複雑なソートもできます:

# 第1キー:部署(3列目)、第2キー:年齢(2列目)
$ sort -t',' -k3,3 -k2n employees.csv

重複を取り除く(-uオプション)

-u(unique)オプションで、重複した行を除去できます:

$ echo -e "apple\nbanana\napple\ncherry" | sort -u
apple
banana
cherry

sort | uniqと同じ効果ですが、sort -uの方が高速です!

🎮 理解度チェック

Q2: CSVファイルの3列目を数値として降順ソートするコマンドは?

CSVファイルの3列目を数値として降順ソートするコマンドは?

実践的な使い方

ログファイルの解析

アクセスログからIPアドレスごとのアクセス数を集計:

# IPアドレスを抽出して、頻度順に表示
$ cut -d' ' -f1 access.log | sort | uniq -c | sort -nr

    150 192.168.1.100
     89 10.0.0.5
     45 192.168.1.101

ディスク使用量の確認

ディレクトリサイズを大きい順に表示:

$ du -sh * | sort -hr
2.5G    Videos
850M    Documents
320M    Pictures
120M    Downloads

プロセスのメモリ使用量

メモリを多く使っているプロセスを見つける:

$ ps aux | sort -k4nr | head -10

これは4列目(%MEM)で数値の降順ソートして、上位10個を表示します。

便利なオプション集

大文字小文字を無視(-fオプション)

$ echo -e "Apple\napple\nBanana" | sort -f
Apple
apple
Banana

ランダムに並べ替え(-Rオプション)

$ seq 1 10 | sort -R
# 実行するたびに順番が変わります

月名でソート(-Mオプション)

$ echo -e "Mar\nJan\nFeb" | sort -M
Jan
Feb
Mar

より高度な使い方

複雑なCSVデータの処理

売上データを日付でソートし、同じ日付は金額の多い順に:

# データ: 日付,商品,数量,金額
$ cat sales.csv
2024-01-05,ProductA,10,1500
2024-01-03,ProductB,5,2500
2024-01-05,ProductC,8,1200

$ sort -t',' -k1,1 -k4nr sales.csv
2024-01-03,ProductB,5,2500
2024-01-05,ProductA,10,1500
2024-01-05,ProductC,8,1200

パフォーマンスの最適化

大きなファイルを扱う時のテクニック:

# メモリバッファを増やす
$ sort -S 2G large_file.txt

# 並列処理を使う
$ sort --parallel=4 huge_file.txt

# テンポラリディレクトリを指定
$ sort -T /fast/tmp large_file.txt

🎮 理解度チェック

Q3: sort -usort | uniqの違いは?

sort -uとsort | uniqの違いは?

トラブルシューティング

よくある問題と解決策

  1. 数値が正しくソートされない

    # 問題
    $ sort numbers.txt
    
    # 解決
    $ sort -n numbers.txt
    
  2. タブ区切りが認識されない

    # 解決法
    $ sort -t$'\t' -k2n file.tsv
    
  3. 日本語が正しくソートされない

    # Cロケールで実行
    $ LC_ALL=C sort japanese.txt
    

よく使うエイリアス

# ~/.bashrcに追加
alias sortsize='du -sh * | sort -hr'     # サイズ順
alias sortmem='ps aux | sort -k4nr'      # メモリ使用量順
alias sortcpu='ps aux | sort -k3nr'      # CPU使用率順

📝 まとめ

今回はsortコマンドについて学びました!

  • 基本: アルファベット順に並べ替え、-rで逆順
  • 数値ソート: -nで数値として、-hで人間が読みやすい形式
  • フィールド指定: -kで特定の列を基準に、-tで区切り文字指定
  • 重複除去: -uで重複行を削除
  • 実践: ログ解析、ディスク使用量確認、プロセス管理など

sortコマンドは、データ処理の基本ツールです。他のコマンドと組み合わせることで、複雑なデータ分析も簡単にできるようになります。まずはsort -nsort -kを使いこなせるようになりましょう!

次はwcコマンドで行数や単語数をカウントする方法を学びます。sortと組み合わせて、さらに強力なデータ分析ができるようになりますよ!

YouTube動画で復習

動画でさらに詳しく学びたい方は、CommandAcademyのYouTubeチャンネルをチェック!視覚的にコマンドの動作を確認できます。

sortコマンドは地味に見えますが、データ処理の要です。grepで抽出、sortで並べ替え、uniqで集計という流れは、ログ解析の定番パターンですよ!