使用awk+sort+uniq進行文字分析

forest7707發表於2017-05-26
原創作品,允許轉載,轉載時請務必以超連結形式標明文章 原始出處 、作者資訊和本宣告。否則將追究法律責任。http://wanyuetian.blog.51cto.com/3984643/1716971

1、uniq命令
uniq - report or omit repeated lines
介紹:uniq對指定的ASCII檔案或標準輸入進行唯一性檢查,以判斷文字檔案中重複出現的行。常用於系統排查及日誌分析
命令格式:
uniq [OPTION]... [File1 [File2]]
uniq從已經排序好的文字檔案File1中刪除重複的行,輸出到標準標準輸出或File2。常作為過濾器,配合管道使用。
在使用uniq命令之前,必須確保操作的文字檔案已經過sort排序,若不帶引數執行uniq,將刪除重複的行。
常見引數:
-c, --count              prefix  lines  by  the  number of occurrences 去重後計數
2、實戰演練

測試資料:

1
2
3
4
5
6
7
8
[root@web01 ~]# cat uniq.txt 
10.0.0.9
10.0.0.8
10.0.0.7
10.0.0.7
10.0.0.8
10.0.0.8
10.0.0.9

a、直接接檔案,不加任何引數,只對相鄰的相同內容去重:

1
2
3
4
5
6
[root@web01 ~]# uniq uniq.txt 
10.0.0.9
10.0.0.8
10.0.0.7
10.0.0.8
10.0.0.9

b、sort命令讓重複的行相鄰(-u引數也可完全去重),然後用uniq進行完全去重

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@web01 ~]# sort uniq.txt 
10.0.0.7
10.0.0.7
10.0.0.8
10.0.0.8
10.0.0.8
10.0.0.9
10.0.0.9
[root@web01 ~]# sort -u uniq.txt 
10.0.0.7
10.0.0.8
10.0.0.9
[root@web01 ~]# sort uniq.txt|uniq
10.0.0.7
10.0.0.8
10.0.0.9

c、sort配合uniq去重後計數

1
2
3
4
[root@web01 ~]# sort uniq.txt|uniq -c
      2 10.0.0.7
      3 10.0.0.8
      2 10.0.0.9

3、企業案例
處理一下檔案內容,將域名取出並根據域名進行計數排序處理(百度和sohu面試題)

1
2
3
4
5
6
7
[root@web01 ~]# cat access.log 

解答:
分析:此類問題是運維工作中最常見的問題。可以演變成分析日誌,檢視TCP各個狀態連線數,檢視單IP連線數排名等等。

1
2
3
4
[root@web01 ~]# awk -F '[/]+' '{print $2}' access.log|sort|uniq -c|sort -rn -k1
      3 
      2 post.etiantian.org
      1 mp3.etiantian.org

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/21220384/viewspace-2139946/,如需轉載,請註明出處,否則將追究法律責任。

相關文章