1、uniq:只會對相鄰的行進行判斷是否重復,不能全文本進行搜索是否重復,所以往往跟sort結合使用。
例子1:
[root@aaa01 ~]# cat a.txt
12
34
56
12
[root@aaa01 ~]# cat a.txt|uniq >>au.txt
[root@aaa01 ~]# cat au.txt
12
34
56
12
例子2:
[root@aaa01 ~]# cat b.txt
10
46
32
10
[root@aaa01 ~]# cat b.txt|sort |uniq >>bu.txt
[root@aaa01 ~]# cat bu.txt
10
32
46
2、awk:可以全文本搜索去重然后進行顯示
例子1:
如m.txt文本:
[root@aaa01 ~]# cat m.txt
12
34
56
12
[root@aaa01 ~]# awk '!x[$0]++' m.txt >ma1.txt
[root@aaa01 ~]# cat ma1.txt
12
34
56
說明:獲取第一行x[12],因為這是第一行,數組m里從沒見過12這個變量,那么自然他的值就是假(0)也就是說x[12]=0,這個時候!就有大作用了,他把x[12]假(0)變成了x[12]為真(!0)這個時候原本不改打印的第一行就變成了應該打印了,取邏輯反后對x[12]的值+1然后處理第二行
第二行x[34]這個情況跟剛才第一行的x[12]一樣的情況,也應該打印他。
第三行x[56]和第一、二兩行一樣的處理邏輯。
到第四行的時候情況遍了,因為第一行已經出現過了x[12]並且已經++過了他的值已經是非0而不是前兩行的0了,本應打印但這時候再由!取邏輯反就不必打印了
所以執行完就是這個結果。
例子2:
[root@aaa01 ~]# awk 'x[$0]++' m.txt >ma2.txt
[root@aaa01 ~]# cat ma2.txt
12
例子3:
[root@aaa01 ~]# vi n.txt
78
12
01
01
78
[root@aaa01 ~]# awk 'x[$0]++' n.txt >na.txt
[root@aaa01 ~]# cat na.txt
01
78