sort排序命令

2022-04-01 11:37:57 字數 3785 閱讀 2215

在linux的只用過程中,總是避免不了排序問題。比如,topn問題。linux提供了sort排序命令,支援常用的排序功能。

sort命令支援很多引數,常用引數如下:

短引數長引數

說明-n

– number-sort

按字串數值排序,與-g區別為不轉為浮點數

-g–general-number-sort

按通用數值排序,支援科學計數法

-f–ignore-case

忽略大小寫,預設大小寫字母不同

-k–key=pos1[,pos2]

排序從pos1開始,若指定pos2,則pos2結束,否則以pos1排序

-t–field-separator=sep

指定列的分割符

-r–reverse

降序排序,預設為公升序

-h–human-numeric-sort

使用易讀性數字(例如: 2k 1g)

-u–unique

去除重複的行

-o–output=file

將輸出寫入檔案

1.預設排序

預設情況下,sort命令,以字母序進行文字排序。如下:

shuanghu@shuanghu:tmp$cat word.txt

onetwo

three

four

shuanghu@shuanghu:tmp$sort word.txt

four

onethree

two

2.數字排序

如果想對數字進行排序,可以使用-n引數

shuanghu@shuanghu:tmp$ cat num.txt 

10020

3shuanghu@shuanghu:tmp$ sort num.txt -n320

100

3.指定列排序

sort排序的時候,可以按欄位分割的資料進行排序。-t引數表示行的分割字元,-k表示第幾列。當然,可以進行降序排序,-r引數可以實現。 

下面是對passwd檔案,以冒號(:)進行分割,然後對第三列以數字方式進行降序排序。

shuanghu@shuanghu:etc$ cat passwd 

daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin

bin:x:2:2:bin:/bin:/usr/sbin/nologin

sys:x:3:3:sys:/dev:/usr/sbin/nologin

sync:x:4:65534:sync:/bin:/bin/sync

games:x:5:60:games:/usr/games:/usr/sbin/nologin

man:x:6:12:man:/var/cache/man:/usr/sbin/nologin

lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin

mail:x:8:8:mail:/var/mail:/usr/sbin/nologin

shuanghu@shuanghu:etc$ sort -t ':' -k 3 -nr passwd

mail:x:8:8:mail:/var/mail:/usr/sbin/nologin

lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin

man:x:6:12:man:/var/cache/man:/usr/sbin/nologin

games:x:5:60:games:/usr/games:/usr/sbin/nologin

sync:x:4:65534:sync:/bin:/bin/sync

sys:x:3:3:sys:/dev:/usr/sbin/nologin

bin:x:2:2:bin:/bin:/usr/sbin/nologin

daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin

4.資料夾大小排序

在du的時候,加上-h可以使用易讀性數字,比如2k,1g,3m這種。sort也支援-h引數。 

比如,du乙個資料夾下的目錄大小後,想以檔案大小進行排序。由於du -h的結果是3k,2m,1g這種,不能簡單的按數字排序。所以,可以使用-h引數。具體如下:

shuanghu@shuanghu:tmp$ du -h

2.0g ./test2

4.0k ./test3

316m ./test

2.3g .

shuanghu@shuanghu:tmp$ du -h |sort -hr

2.3g .

2.0g ./test2

316m ./test

4.0k ./test3

5.系統程序記憶體占用排序

檢視系統程序中,記憶體占用最多的前5個程序資訊

shuanghu@shuanghu:tmp$ ps aux|sort -gr -k 4|head -n 5shuanghu  1740 15.7  4.6 1506764 189872 ?      sl    5月07 142:08compiz

root 1304 2.1 1.9 338928 80208 tty7 ssl+ 5月07 19:29 /usr/bin/x -core :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch

shuanghu 1933 0.0 1.1 1074520 46708 ? sl 5月07 0:00 /usr/lib/evolution/evolution-calendar-factory

shuanghu 1833 0.0 0.8 974900 34468 ? sl 5月07 0:01 nautilus -n

shuanghu 2111 0.0 0.6 655712 24920 ? sl 5月07 0:16 gnome-terminal

6.對檔案內容進行去重

如果檔案內容有很多重複的,需要進行去重。sort也是支援的,可以通過-u引數使用

shuanghu@shuanghu:tmp$cat word.txt

onetwo

twothree

three

three

four

four

four

shuanghu@shuanghu:tmp$sort -u word.txt

four

onethree

two

7.將sort輸出內容寫入檔案

在shell中,一般將控制台內容寫入檔案,可以使用重定向,但如果想把sort的排序內容寫回檔案,則不能使用重定向。則需要-o引數。具體如下:

shuanghu@shuanghu:tmp$cat word.txt

onetwo

three

four

shuanghu@shuanghu:tmp$sort word.txt >word.txt

shuanghu@shuanghu:tmp$cat word.txt #輸出為空

shuanghu@shuanghu:tmp$sort word.txt -o word.txt

shuanghu@shuanghu:tmp$sort -u word.txt

four

onethree

two

Linux 排序命令sort

很多時候,我們都會去計算一次資料裡頭的相同型態的資料總數,舉例來說,使用 last 可以查得這個月份有登陸主機者的身份。那麼我可以針對每個使用者查出他們的總登陸次數嗎?此時就得要排序與計算之類的命令來輔助了!底下我們介紹幾個好用的排序與統計命令,首先是排序命令sort。root www sort f...

Linux 排序命令sort

很多時候,我們都會去計算一次資料裡頭的相同型態的資料總數,舉例來說,使用 last 可以查得這個月份有登陸主機者的身份。那麼我可以針對每個使用者查出他們的總登陸次數嗎?此時就得要排序與計算之類的命令來輔助了!底下我們介紹幾個好用的排序與統計命令,首先是排序命令sort。root www sort f...

Linux排序命令sort筆記

很多時候linux需要對文字相對比較規範的文字資料進行排序,這時候可以使用linux系統下的sort命令進行處理。語法格式 sort ntkr filename 常用引數 n 根據數字進行排序 t 指定的分隔符 k 指定分隔符的第幾列 r 降序排序 用法示例 a 98 80 100 95 d 88 ...