Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學

Linux sort 排序命令深度解析:從入門到多鍵值進階

編輯:Linux 系統常見問題解答

核心原理

sort 以每一行為單位,按 ASCII 碼從首字元向後比較,預設升序輸出。若需數值排序必須加 -n,否則 10 會排在 2 前面。

常用選項速查

選項功能
-u去除重複行(唯一輸出)
-r降序排列
-o直接寫入原檔案,避免重導向清空檔案風險
-f忽略大小寫比較
-c / -C檢查是否已排序;-c 輸出首個亂序行,-C 僅回傳碼
-M按月份縮寫排序(JAN < FEB ...)
-b忽略行首空白字元

欄位分隔與多鍵排序:-t 與 -k

指定分隔符 -t ':',配合 -k 欄位號 指定排序欄位。範例:sort -n -t ':' -k 2 facebook.txt 以冒號分隔、按第 2 欄數值升序。

多層級排序優先權

連續寫多個 -k 即可設定優先序:sort -n -t ' ' -k2 -k3 testsort.txt 先按第 2 欄(人數)升序,相同再按第 3 欄(薪資)升序。

單欄位指定升降序

在 -k 後附加修飾字:r 降序、n 數值。範例:sort -t ' ' -k3rn -k2n testsort.txt 第 3 欄薪資降序、第 2 欄人數升序。注意:若全域已用 -n,單欄再加 n 會重複但不報錯;建議統一寫在 -k 後。

-k 完整語法詳解

[ FStart [ .CStart ] ] [ Modifier ] [ , [ FEnd [ .CEnd ] ][ Modifier ] ]
  • FStart:起始欄位編號(從 1 起算)。
  • CStart:該欄位內起始字元位置(從 1 起算),省略則為欄首。
  • Modifier:n、r、b 等。
  • End 部分:若省略,預設到行尾;.CEnd=0 亦代表欄尾。

範例:sort -t ' ' -k 1.2,1.2 testsort.txt 從公司名稱第 2 個字元開始排序。

實戰範例:多欄位混合排序

# 資料:公司 名稱 人數 薪資
# 需求:薪資降序,人數升序
sort -t ' ' -k3rn -k2n testsort.txt

輸出結果符合預期,驗證了修飾字在單欄位生效的機制。

進階技巧

  • sort -u 可直接去重,省去 uniq 管道。
  • 大檔案排序建議加 -S 指定記憶體緩衝(如 -S 50%),並搭配 -T 指定暫存目錄。
  • sort -m 合併已排序檔案,效能遠優於重新排序。
Copyright © Windows教程網 All Rights Reserved