sort命令
sort 命令對 File 參數(shù)指定的文件中的行排序即彪,并將結(jié)果寫到標(biāo)準(zhǔn)輸出苗分。如果 File 參數(shù)指定多個文件供鸠,那么 sort 命令將這些文件連接起來豫柬,并當(dāng)作一個文件進(jìn)行排序锌钮。
sort語法:
sort [-fbMnrtuk] [file or stdin]
選項與參數(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 :以那個區(qū)間 (field) 來進(jìn)行排序的意思
舉例:
對/etc/passwd 的賬號進(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
sort 是默認(rèn)以第一個數(shù)據(jù)來排序遵湖,而且默認(rèn)是以字符串形式來排序,所以由字母 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
默認(rèn)是以字符串來排序的谋国,如果想要使用數(shù)字排序:
cat /etc/passwd | sort -t ':' -k 3n
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
默認(rèn)是升序排序,如果要倒序排序迁沫,如下:
cat /etc/passwd | sort -t ':' -k 3nr
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
ntp:x:106:113::/home/ntp:/bin/false
messagebus:x:105:109::/var/run/dbus:/bin/false
sshd:x:104:65534::/var/run/sshd:/usr/sbin/nologin
如果要對/etc/passwd,先以第六個域的第2個字符到第4個字符進(jìn)行正向排序芦瘾,再基于第一個域進(jìn)行反向排序。
cat /etc/passwd | sort -t':' -k 6.2,6.4 -k 1r
sync:x:4:65534:sync:/bin:/bin/sync
proxy:x:13:13:proxy:/bin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
查看/etc/passwd有多少個shell:對/etc/passwd的第七個域進(jìn)行排序集畅,然后去重:
cat /etc/passwd | sort -t':' -k 7 -u
root:x:0:0:root:/root:/bin/bash
syslog:x:101:102::/home/syslog:/bin/false
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
sshd:x:104:65534::/var/run/sshd:/usr/sbin/nologin
uniq命令
uniq命令可以去除排序過的文件中的重復(fù)行近弟,因此uniq經(jīng)常和sort合用。也就是說挺智,為了使uniq起作用祷愉,所有的重復(fù)行必須是相鄰的。
uniq語法:
[root@www ~]# uniq [-icu]
選項與參數(shù):
-i :忽略大小寫字符的不同赦颇;
-c :進(jìn)行計數(shù)
-u :只顯示唯一的行
舉例
testfile的內(nèi)容如下:
cat testfile
hello
world
friend
hello
world
hello
直接刪除未經(jīng)排序的文件二鳄,將會發(fā)現(xiàn)沒有任何行被刪除
#uniq testfile
hello
world
friend
hello
world
hello
排序文件,默認(rèn)是去重:
#cat testfile | sort |uniq
friend
hello
world
排序之后刪除了重復(fù)行媒怯,同時在行首位置輸出該行重復(fù)的次數(shù):
#sort testfile | uniq -c
1 friend
3 hello
2 world
僅顯示存在重復(fù)的行订讼,并在行首顯示該行重復(fù)的次數(shù):
#sort testfile | uniq -dc
3 hello
2 world
僅顯示不重復(fù)的行:
sort testfile | uniq -u
friend