🎯 この記事で学べること
- 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 -h
やls -lh
の出力を並べ替える時は、必ずsort -h
を使いましょう。sort -n
では正しく並びません!
🎮 理解度チェック
Q1: 次のコマンドの結果はどうなりますか?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列目を数値として降順ソートするコマンドは?
実践的な使い方
ログファイルの解析
アクセスログから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 -u
とsort | uniq
の違いは?
トラブルシューティング
よくある問題と解決策
-
数値が正しくソートされない
# 問題 $ sort numbers.txt # 解決 $ sort -n numbers.txt
-
タブ区切りが認識されない
# 解決法 $ sort -t$'\t' -k2n file.tsv
-
日本語が正しくソートされない
# 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 -n
とsort -k
を使いこなせるようになりましょう!
次はwcコマンドで行数や単語数をカウントする方法を学びます。sort
と組み合わせて、さらに強力なデータ分析ができるようになりますよ!
YouTube動画で復習
動画でさらに詳しく学びたい方は、CommandAcademyのYouTubeチャンネルをチェック!視覚的にコマンドの動作を確認できます。
sort
コマンドは地味に見えますが、データ処理の要です。grep
で抽出、sort
で並べ替え、uniq
で集計という流れは、ログ解析の定番パターンですよ!