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 選項。

延伸閱讀