1• sort
sort 是很有趣的指令,他可以幫我們進行排序,而且可以依據不同的資料型态來排序喔! 例如數字與文字的排序就不一樣。此外,排序的字元與語系的編碼有關,是以, 如果您需要排序時,建議使用 LC_ALL=C 來讓語系統一,資料排序比較好一些。
[root@linux ~]# sort [-fbMnrtuk] [file or stdin]
參數:
-f :忽略大小寫的差異,例如 A 與 a 視為編碼相同;
-b :忽略最前面的空格符部分;
-M :以月份的名字來排序,例如 JAN, DEC 等等的排序方法;
-n :使用『純數字』進行排序(預設是以文字型态來排序的);
-r :反向排序;
-u :就是 uniq ,相同的資料中,僅出現一行代表;
-t :分隔符,預設是 tab 鍵;
-k :以那個區間 (field) 來進行排序的意思,
範例:
範例一:個人賬号都記錄在 /etc/passwd 下,請将賬号進行排序。
[root@linux ~]# 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
# 我省略很多的輸出~由上面的資料看起來, sort 是預設『以第一個』資料來排序,
# 而且預設是以『文字』型态來排序的喔!是以由 a 開始排到最後啰!
範例二:/etc/passwd 内容是以 : 來分隔的,我想以第三欄來排序,該如何?
[root@linux ~]# cat /etc/passwd | sort -t ':' -k 3
root:x:0:0:root:/root:/bin/bash
iiimd:x:100:101:IIIMF server:/usr/lib/iiim:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
# 看到特殊字型的輸出部分了吧?怎麼會這樣排列啊?呵呵!沒錯啦~
# 如果是以文字型态來排序的話,原本就會是這樣,想要使用數字排序:
# cat /etc/passwd | sort -t ':' -k 3 -n
# 這樣才行啊!用那個 -n 來告知 sort 以數字來排序啊!
範例三:利用 last ,将輸出的資料僅取賬号,并加以排序
[root@linux ~]# last | cut -d ' ' -f1 | sort
sort 同樣是很常用的指令呢!因為我們常常需要比較一些資訊啦! 舉個上面的第二個例子來說好了!今天假設你有很多的賬号,而且你想要知道最大的使用者 ID 目前到哪一号了!呵呵!使用 sort 一下子就可以知道答案咯!當然其使用還不止此啦! 有空的話不妨玩一玩!
• uniq
如果我排序完成了,想要将重複的資料僅列出一個顯示,可以怎麼做呢?
[root@linux ~]# uniq [-ic]
-i :忽略大小寫字元的不同;
-c :進行計數
範例一:使用 last 将賬号列出,僅取出賬号欄,進行排序後僅取出一位;
[root@linux ~]# last | cut -d ' ' -f1 | sort | uniq
範例二:承上題,如果我還想要知道每個人的登入總次數呢?
[root@linux ~]# last | cut -d ' ' -f1 | sort | uniq -c
這個指令用來将『重複的行删除掉隻顯示一個』,舉個例子來說, 你要知道這個月份登入你主機的使用者有誰,而不在乎他的登入次數,那麼就使用上面的範例, (1)先将所有的資料列出;(2)再将人名獨立出來;(3)經過排序;(4)隻顯示一個! 由于這個指令是在将重複的東西減少,是以當然需要『配合排序過的檔案』來處理啰!
• wc
如果我想要知道 /etc/man.config 這個檔案裡面有多少字?多少行?多少字元的話, 可以怎麼做呢?其實可以利用 wc 這個指令來達成喔!他可以幫我們計算輸出的訊息的整體資料!
[root@linux ~]# wc [-lwm]
-l :僅列出行;
-w :僅列出多少字(英文單字);
-m :多少字元;
範例一:那個 /etc/man.config 裡面到底有多少相關字、行、字元數?
[root@linux ~]# cat /etc/man.config | wc
138 709 4506
# 輸出的三個數字中,分别代表: 『行、字數、字元數』
範例二:我知道使用 last 可以輸出登入者,但是 last 最後兩行并非賬号内容,
那麼請問,我該如何以一行指令串取得這個月份登入系統的總人次?
[root@linux ~]# last | grep [a-zA-Z] | grep -v 'wtmp' | wc -l
# 由于 last 會輸出空白行與 wtmp 字樣在最底下兩行,是以,我利用
# grep 取出非空白行,以及去除 wtmp 那一行,在計算行數,就能夠了解啰!
wc 也可以當作指令?呵呵!這可不是上洗手間的 WC 呢! 這是相當有用的計算檔案内容的一個工具組喔!舉個例子來說, 當你要知道目前你的賬号檔案中有多少個賬号時,就使用這個方法:『 cat /etc/passwd | wc -l 』啦!因為 /etc/passwd 裡頭一行代表一個使用者呀! 是以知道行數就曉得有多少的賬号在裡頭了!而如果要計算一個檔案裡頭有多少個字元時,呵呵!就使用 wc -c 這個參數吧!