sort — 排序文字行
對文字行依字母或數值順序排序。
語法
sort [選項] [檔案...]
常用選項
| 選項 | 說明 | 範例 |
|---|---|---|
-r, --reverse |
反轉排序(降序) | sort -r file.txt |
-n, --numeric-sort |
依數值排序(而非字串) | sort -n numbers.txt |
-h, --human-numeric-sort |
依人類可讀數字排序(1K、2M) | du -sh * | sort -h |
-k n,m |
依第 n 到 m 欄位排序 | sort -k2,2n data.txt |
-t 分隔符 |
指定欄位分隔符(預設空白) | sort -t: -k3 /etc/passwd |
-u, --unique |
去除重複行,只保留唯一的行 | sort -u list.txt |
-f, --ignore-case |
忽略大小寫排序 | sort -f names.txt |
-s, --stable |
穩定排序(相同鍵值保持原始順序) | sort -s -k1 file.txt |
-o 輸出檔 |
輸出到指定檔案(可以是輸入檔本身) | sort -o file.txt file.txt |
-R, --random-sort |
隨機排序(shuffle) | sort -R list.txt |
使用範例
範例 1:基本字母排序
對 names.txt 的每一行以字母順序排序(預設升序)。
$ sort names.txt
Alice
Bob
Charlie
Dave
範例 2:數值排序
使用 -n 按數值大小排序。若不用 -n,10 會排在 2 之前(字串比較)。
$ sort -n numbers.txt
1
5
10
42
100
範例 3:反轉排序(降序)
使用 -r 反轉,搭配 -n 即數值降序排列。
$ sort -rn scores.txt
100
95
87
72
60
範例 4:依欄位排序
以空白分隔,依第 2 欄(數值)排序,常用於處理表格資料。
$ sort -k2,2n sales.txt
product_c 100
product_a 250
product_b 1050
範例 5:排序並去重
使用 -u 排序後自動去除重複行,等效於 sort | uniq。
$ sort -u emails.txt
alice@example.com
bob@example.com
charlie@example.com
範例 6:排序磁碟使用量
使用 -h 對 du 的人類可讀輸出(含 K/M/G 單位)進行正確的大小排序。
$ du -sh /var/* 2>/dev/null | sort -rh | head -5
12G /var/lib
2.3G /var/log
850M /var/cache
12M /var/tmp
常見錯誤與排錯
數字排序順序不正確(10 排在 2 前)
- 原因
- 未使用 -n,預設是字串比較,"10" 會排在 "2" 前(因 "1" < "2")。
- 解法
- 數字欄位排序必須加 -n 選項。