テキスト処理

sort

テキストの行を並べ替える。uniq と組み合わせた重複除去が定番

SYNTAX sort [options] [file...]

主なオプション

オプション説明
-n数値として並べ替え(デフォルトは文字列順)
-r逆順(降順)
-k <n>n番目のフィールドをキーに並べ替え
-t <sep>フィールドセパレータを指定(デフォルト: 空白・タブ)
-u重複行を除去(uniq 相当)
-f大文字小文字を区別しない
-h人間が読みやすいサイズ(1K, 10M など)で数値比較
-Vバージョン番号として比較(1.9 < 1.10)

使用例

# アルファベット順に並べ替え
sort names.txt
# 逆順(Z〜A)
sort -r names.txt
# 数値として並べ替え(文字列順だと "10" < "9" になってしまう)
sort -n scores.txt
# 数値の降順
sort -nr scores.txt
# 2列目をキーに並べ替え(空白区切り)
sort -k2 data.txt
# CSV の3列目を数値として降順に並べ替え
sort -t, -k3 -nr data.csv
# ディレクトリのサイズを大きい順に表示
du -sh * | sort -rh
# 重複行を除去しながら並べ替え
sort -u tags.txt

uniq との定番コンビ

uniq は隣接する重複しか除去できないため、必ず sort で並べてから渡す。

# 重複除去
sort file.txt | uniq

# 出現回数の多い順にランキング
sort access.log | uniq -c | sort -rn | head -20

安定ソート

# -s オプションで安定ソート(同じキーの要素は元の順序を保つ)
sort -s -k2 data.txt