於 Bash shell 使用 sort 來分別排序 各別欄位 的資料

於 Linux 的 Base shell 中, 要使用 sort 來分別排序第一欄、第二欄、第三欄的資料, 要下那些參數?

檔案資料

file.txt # 檔案內容, 中間空白是 Tab 分隔

486     43070   353     2009-09-30 07:11:13     中文
51      31431   35      2009-09-30 22:48:43     測試
192     20587   115     2009-09-30 22:48:38     排序

排序

檔案中間空的是 Tab, 所以直接下述指令即可.(不需要 -t 的參數, -k => 第幾欄)

  • $ sort -n -k 1 -r file.txt | more # 第一欄位排序 486, 192, 51
  • $ sort -n -k 2 -r file.txt | more # 第二欄位排序 43070, 31431, 20587
  • $ sort -n -k 3 -r file.txt | more # 第三欄位排序 353, 115, 35

但若有 Tab 又有其他資料等等, 則需要先把 Tab 換成空白, 再去排序.

  • $ cat file.txt | tr "\t" ' ' | sort -k 2 -t " " # Tab => 空白後排序
  • $ cat file.txt | tr "\t" ',' | sort -n -r -k 2 -t, # Tab => , 然後排序 (-t, => 用","分隔)

sort 參數解釋

  • -n 依數字大小排序
  • -r 降冪排序(反向排序, 大 -> 小)
  • -t, 欄位以 , 當分隔符號
  • -k 以第幾個欄位來排序

相關網頁

作者: Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料