排序命令: sort, wc, uniq
很多時(shí)候,我們都會(huì)去計(jì)算一次數(shù)據(jù)里頭的相同型態(tài)的數(shù)據(jù)總數(shù),舉例來說, 使用 last 可以查得這個(gè)月份有登陸主機(jī)者的身份。那么我可以針對(duì)每個(gè)使用者查出他們的總登陸次數(shù)嗎? 此時(shí)就得要排序與計(jì)算之類的命令來輔助了!底下我們介紹幾個(gè)好用的排序與統(tǒng)計(jì)命令喔!
- sort
sort 是很有趣的命令,他可以幫我們進(jìn)行排序,而且可以依據(jù)不同的數(shù)據(jù)型態(tài)來排序喔! 例如數(shù)字與文字的排序就不一樣。此外,排序的字符與語系的編碼有關(guān),因此, 如果您需要排序時(shí),建議使用 LANG=C 來讓語系統(tǒng)一,數(shù)據(jù)排序比較好一些。
| [root@www ~]# sort [-fbMnrtuk] [file or stdin] 選項(xiàng)與參數(shù): -f :忽略大小寫的差異,例如 A 與 a 視為編碼相同; -b :忽略最前面的空格符部分; -M :以月份的名字來排序,例如 JAN, DEC 等等的排序方法; -n :使用『純數(shù)字』進(jìn)行排序(默認(rèn)是以文字型態(tài)來排序的); -r :反向排序; -u :就是 uniq ,相同的數(shù)據(jù)中,僅出現(xiàn)一行代表; -t :分隔符,默認(rèn)是用 [tab] 鍵來分隔; -k :以那個(gè)區(qū)間 (field) 來進(jìn)行排序的意思范例一:個(gè)人賬號(hào)都記錄在 /etc/passwd 下,請(qǐng)將賬號(hào)進(jìn)行排序。 [root@www ~]# cat /etc/passwd | sort adm:x:3:4:adm:/var/adm:/sbin/nologin apache:x:48:48:Apache:/var/www:/sbin/nologin bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin # 鳥哥省略很多的輸出~由上面的數(shù)據(jù)看起來, sort 是默認(rèn)『以第一個(gè)』數(shù)據(jù)來排序, # 而且默認(rèn)是以『文字』型態(tài)來排序的喔!所以由 a 開始排到最后啰!范例二:/etc/passwd 內(nèi)容是以 : 來分隔的,我想以第三欄來排序,該如何? [root@www ~]# cat /etc/passwd | sort -t ':' -k 3 root:x:0:0:root:/root:/bin/bash uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin bin:x:1:1:bin:/bin:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin # 看到特殊字體的輸出部分了吧?怎么會(huì)這樣排列啊?呵呵!沒錯(cuò)啦~ # 如果是以文字型態(tài)來排序的話,原本就會(huì)是這樣,想要使用數(shù)字排序: # cat /etc/passwd | sort -t ':' -k 3 -n # 這樣才行啊!用那個(gè) -n 來告知 sort 以數(shù)字來排序啊!范例三:利用 last ,將輸出的數(shù)據(jù)僅取賬號(hào),并加以排序 [root@www ~]# last | cut -d ' ' -f1 | sort |
sort 同樣是很常用的命令呢!因?yàn)槲覀兂3P枰容^一些信息啦! 舉個(gè)上面的第二個(gè)例子來說好了!今天假設(shè)你有很多的賬號(hào),而且你想要知道最大的使用者 ID 目前到哪一號(hào)了!呵呵!使用 sort 一下子就可以知道答案咯!當(dāng)然其使用還不止此啦! 有空的話不妨玩一玩!
- uniq
如果我排序完成了,想要將重復(fù)的數(shù)據(jù)僅列出一個(gè)顯示,可以怎么做呢?
| [root@www ~]# uniq [-ic] 選項(xiàng)與參數(shù): -i :忽略大小寫字符的不同; -c :進(jìn)行計(jì)數(shù)范例一:使用 last 將賬號(hào)列出,僅取出賬號(hào)欄,進(jìn)行排序后僅取出一位; [root@www ~]# last | cut -d ' ' -f1 | sort | uniq范例二:承上題,如果我還想要知道每個(gè)人的登陸總次數(shù)呢? [root@www ~]# last | cut -d ' ' -f1 | sort | uniq -c112 reboot41 root1 wtmp # 從上面的結(jié)果可以發(fā)現(xiàn) reboot 有 12 次, root 登陸則有 41 次! # wtmp 與第一行的空白都是 last 的默認(rèn)字符,那兩個(gè)可以忽略的! |
這個(gè)命令用來將『重復(fù)的行刪除掉只顯示一個(gè)』,舉個(gè)例子來說, 你要知道這個(gè)月份登陸你主機(jī)的用戶有誰,而不在乎他的登陸次數(shù),那么就使用上面的范例, (1)先將所有的數(shù)據(jù)列出;(2)再將人名獨(dú)立出來;(3)經(jīng)過排序;(4)只顯示一個(gè)! 由于這個(gè)命令是在將重復(fù)的東西減少,所以當(dāng)然需要『配合排序過的文件』來處理啰!
- wc
如果我想要知道 /etc/man.config 這個(gè)文件里面有多少字?多少行?多少字符的話, 可以怎么做呢?其實(shí)可以利用 wc 這個(gè)命令來達(dá)成喔!他可以幫我們計(jì)算輸出的信息的整體數(shù)據(jù)!
| [root@www ~]# wc [-lwm] 選項(xiàng)與參數(shù): -l :僅列出行; -w :僅列出多少字(英文單字); -m :多少字符;范例一:那個(gè) /etc/man.config 里面到底有多少相關(guān)字、行、字符數(shù)? [root@www ~]# cat /etc/man.config | wc 141 722 4617 # 輸出的三個(gè)數(shù)字中,分別代表: 『行、字?jǐn)?shù)、字符數(shù)』范例二:我知道使用 last 可以輸出登陸者,但是 last 最后兩行并非賬號(hào)內(nèi)容,那么請(qǐng)問,我該如何以一行命令串取得這個(gè)月份登陸系統(tǒng)的總?cè)舜?#xff1f; [root@www ~]# last | grep [a-zA-Z] | grep -v 'wtmp' | wc -l # 由于 last 會(huì)輸出空白行與 wtmp 字樣在最底下兩行,因此,我利用 # grep 取出非空白行,以及去除 wtmp 那一行,在計(jì)算行數(shù),就能夠了解啰! |
wc 也可以當(dāng)作命令?這可不是上洗手間的 WC 呢!這是相當(dāng)有用的計(jì)算文件內(nèi)容的一個(gè)工具組喔!舉個(gè)例子來說, 當(dāng)你要知道目前你的賬號(hào)文件中有多少個(gè)賬號(hào)時(shí),就使用這個(gè)方法:『 cat /etc/passwd | wc -l 』啦!因?yàn)?/etc/passwd 里頭一行代表一個(gè)使用者呀! 所以知道行數(shù)就曉得有多少的賬號(hào)在里頭了!而如果要計(jì)算一個(gè)文件里頭有多少個(gè)字符時(shí),就使用 wc -m 這個(gè)選項(xiàng)吧!
總結(jié)
以上是生活随笔為你收集整理的排序命令: sort, wc, uniq的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux命令join与paste
- 下一篇: 基础正规表示法字符汇整 (charact