於 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 以第幾個欄位來排序