linux上文件內容去重的問題uniq/awk


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM