3.awk數組詳解及企業實戰案例

来源:http://www.cnblogs.com/hackerer/archive/2016/04/07/5365967.html
-Advertisement-
Play Games

awk數組詳解及企業實戰案例 3.列印數組: [root@nfs-server test]# awk 'BEGIN{array[1]="zhurui";array[2]="zhuzhu";for(key in array) print key,array[key]}' 1 zhurui 2 zhuz ...


awk數組詳解及企業實戰案例

3.列印數組:
  1. [root@nfs-server test]# awk 'BEGIN{array[1]="zhurui";array[2]="zhuzhu";for(key in array) print key,array[key]}'
  2. 1 zhurui
  3. 2 zhuzhu
  4. [root@nfs-server test]#
  1. [root@nfs-server test]# awk 'BEGIN{array[1]="zhurui";array[2]="zhuzhu";}END {for(key in array) print key,array[key]}'/etc/hosts
  2. 1 zhurui
  3. 2 zhuzhu
  1. 把文件內容第一列作為下標,第二列作為值,放入數組然後輸出。
  2. [root@nfs-server test]# cat t3.log
  3. 1 zhurui
  4. 2 zhuzhu
  5. [root@nfs-server test]# awk 'BENGIN{S[$1]=$2;}END{for(k in S) print k,S[k]}' t3.log
  6. [root@nfs-server test]# awk '{S[$1]=$2;}END{for(k in S) print k,S[k]}' t3.log
  7. 1 zhurui
  8. 2 zhuzhu
4、腳本:
  1. #!/bin/awk
  2. BEGIN{
  3. array[1]="zhurui"
  4. array[2]="zhuzhu"
  5. for(key in array)
  6. print key,array[key];
  7. }
  1. [root@nfs-server test]# awk -f t2.awk
  2. 1 zhurui
  3. 2 zhuzhu
  4. [root@nfs-server test]#
5.把文件內容第一列作為下標k,第二列作為值S[k],放入數組S[]然後輸出。
  1. [root@nfs-server test]# cat t3.log
  2. 1 zhurui
  3. 2 zhuzhu
  4. [root@nfs-server test]# awk 'BENGIN{S[$1]=$2;}END{for(k in S) print k,S[k]}' t3.log
  5. [root@nfs-server test]# awk '{S[$1]=$2;}END{for(k in S) print k,S[k]}' t3.log
  6. 1 zhurui
  7. 2 zhuzhu
運用綜上理解,請做考試題:處理以下文件內容,將功能變數名稱取出並根據功能變數名稱進行計數排序處理:(百度和SOHU面試題) test.log http://www.judong.org/index.html http://www.judong.org/1.html
http://post.judong.org/index.html http://mp3.judong.org/index.html
http://www.judong.org/3.html http://post.judong.org/2.html
  1. [root@nfs-server test]# awk -F "/"'{S[$3]=S[$3]+1;}END{for(k in S) print k,S[k]}' test.log
  2. mp3.judong.org 1
  3. post.judong.org 2
  4. www.judong.org 3
最終答案:
  1. [root@nfs-server test]# awk -F "/"'{S[$3]++}END{for(k in S) print k,S[k]}' test.log|sort -rn -k2|head
  2. www.judong.org 3
  3. post.judong.org 2
  4. mp3.judong.org 1
  5. [root@nfs-server test]#
例3:統計Web日誌單IP訪問排名(這個工作中常用,面試也常用)
對於統計訪問連接IP個數的答案為:
  1. [root@nfs-server test]# awk -F " "'{S[$1]=S[$1]+1;}END{for (k in S) print k,S[k]}' access-test.log|sort -rn|head ##此方法較複雜
  2. 10.0.0.3775
  3. 10.0.0.1322
  4. 10.0.0.1245
  5. 10.0.0.1202
  6. 10.0.0.1082
  7. 10.0.0.1001
  8. [root@nfs-server test]# awk -F " "'{S[$1]++;}END{for (k in S) print k,S[k]}' access-test.log|sort -rn|head ##上一步的簡化版
  9. 10.0.0.3775
  10. 10.0.0.1322
  11. 10.0.0.1245
  12. 10.0.0.1202
  13. 10.0.0.1082
  14. 10.0.0.1001
  15. [root@nfs-server test]# awk -F " "'{Z[$1]++;}END{for (k in Z) print k,Z[k]}' access-test.log|sort -rn|head
  16. 10.0.0.3775
  17. 10.0.0.1322
  18. 10.0.0.1245
  19. 10.0.0.1202
  20. 10.0.0.1082
  21. 10.0.0.1001
方法1: 方法2:   例4:統計企業工作中高併發linux伺服器不同網路連接狀態對應的數量
方法1:
  1. [root@nfs-server test]# awk '/^tcp/ {S[$NF]++}END{for(k in S) print S[k],k}' netstat.log|sort -rn|head
  2. 105 TIME_WAIT
  3. 101 ESTABLISHED
  4. 55 FIN_WAIT2
  5. 7 FIN_WAIT1
  6. 5 SYN_RECV
  7. 5 LISTEN
  8. 3 LAST_ACK
  9. 1 CLOSING
  10. [root@nfs-server test]#
方法2:
  1. [root@nfs-server test]# awk '/^tcp/ {print $NF}' netstat.log|sort|uniq -c|sort -rn|head
  2. 105 TIME_WAIT
  3. 101 ESTABLISHED
  4. 55 FIN_WAIT2
  5. 7 FIN_WAIT1
  6. 5 SYN_RECV
  7. 5 LISTEN
  8. 3 LAST_ACK
  9. 1 CLOSING
  10. [root@nfs-server test]#
例5: 分析圖片服務日誌,把日誌(每個圖片訪問次數*圖片大小的總和)排行,取top10,也就是計算每個url的總訪問大小

說明:範例7的生產環境應用:這個功能可以用於IDCCDN網站流量帶寬很高,然後通過分析伺服器日誌哪些元素占用流量過大,進而進行優化裁剪該圖片(見老男孩發佈的《淘寶的雙十一超大流量應對文章點評》),壓縮js等措施。

本題需要輸出三個指標: 【訪問次數】    【訪問次數*單個文件大小】   【文件名(可以帶URL)】

解答

測試數據

59.33.26.105 - - [08/Dec/2010:15:43:56 +0800] "GET /static/images/photos/2.jpg HTTP/1.1" 200 11299"http://oldboy.blog.51cto.com/static/web/column/17/index.shtml?courseId=43" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)"

59.33.26.105 - - [08/Dec/2010:15:43:56 +0800] "GET /static/images/photos/2.jpg HTTP/1.1" 200 11299"http://oldboy.blog.51cto.com/static/web/column/17/index.shtml?courseId=43" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)"

59.33.26.105 - - [08/Dec/2010:15:44:02 +0800] "GET /static/flex/vedioLoading.swf HTTP/1.1" 200 3583"http://oldboy.blog.51cto.com/static/flex/AdobeVideoPlayer.swf?width=590&height=328&url=/[[DYNAMIC]]/2" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)"

124.115.4.18 - - [08/Dec/2010:15:44:15 +0800] "GET /?= HTTP/1.1" 200 46232 "-" "-"

124.115.4.18 - - [08/Dec/2010:15:44:25 +0800] "GET /static/js/web_js.js HTTP/1.1" 200 4460 "-" "-"

124.115.4.18 - - [08/Dec/2010:15:44:25 +0800] "GET /static/js/jquery.lazyload.js HTTP/1.1" 200 1627 "-" "-"

法一:通過兩個數組來計算

因為我們要的最終結果是某個文件的訪問次數和消耗的流量,所以考慮建立以文件名為索引的兩個數組,一個存儲訪問次數,一個保存消耗的流量,這樣當使用awk按行遍歷文件時,對次數數組+1,同時對流量數組進行文件大小的累加,等文件掃描完成,再遍歷輸出兩個數組既可以得到該文件的反問次數和總的流量消耗。

[root@locatest scripts]# awk '{array_num[$7]++;array_size[$7]+=$10}END{for(x in array_num){print array_size[x],array_num[x],x}}' access_2010-12-8.log |sort -rn -k1|head -10 >1.log

法二:

[root@locatest scripts]# awk '{print $7"\t" $10}' access_2010-12-8.log|awk '{S[$1]+=$2;S1[$1]+=1}END{for(i in S) print S[i],S1[i],i}'|sort -rn|head -10 >2.log

[root@locatest scripts]# diff 1.log 2.log

[root@locatest scripts]# cat 1.log

57254 1 /static/js/jquery-jquery-1.3.2.min.js

46232 1 /?=

44286 1 //back/upload/course/2010-10-25-23-48-59-048-18.jpg

33897 3 /static/images/photos/2.jpg

11809 1 /back/upload/teacher/2010-08-30-13-57-43-06210.jpg

10850 1 /back/upload/teacher/2010-08-06-11-39-59-0469.jpg

6417 1 /static/js/addToCart.js

4460 1 /static/js/web_js.js

3583 2 /static/flex/vedioLoading.swf

2686 1 /static/js/default.js



 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在測試ORACLE 10.2.0.4升級到10.2.0.5 Patch Set的過程中,遇到一個內核參數檢查失敗的問題,具體錯誤信息如下所示 實驗環境: 操作系統:Oracle Linux Server release 5.7 記憶體:4G 資料庫版本:10.2.0.4.0 Checking oper... ...
  • 1、下載安裝redis 在linux伺服器上,命令行執行以下命令(cd ./usr local/src 一般源碼放在這裡(推薦源碼安裝)) 說明: wget:下載遠程文件到本地當前文件夾中。 tar xzf :解壓文件到當前文件夾目錄 cd:進入文件夾 make make all make inst ...
  • 距離上次折騰已經有很長一段時間了。。。 不說這個,剛好有空閑,把這兩天折騰的 Tomcat 8 的服務配置整理出來收錄一下。 1、JDK安裝 1)檢查伺服器是否預裝了 openJdk,如果有就刪除,在這裡因為我的系統里沒有所以不多贅述。 2)到 oracle 的官網下載 JDK 安裝包,這裡我使用的 ...
  • 讓apache與mysql隨著系統自動啟動 在Linux中有一個文件/etc/rc.d/rc.local文件,其系統在啟動時會自動載入該文件,我們可以把要啟動的服務放入這個文件中即可。 添加以下代碼: ...
  • 多線程條件變數應用例子 Input_manager.h InputOpr 結構體添加 進程 ID :pthread_t t_TreadID; Makefile 添加線程庫 –lpthread LDFLAGS := -lm -lfreetype -lts –lpthread g_tTSDev = ts ...
  • zabbix是一個基於WEB界面的提供分散式系統監視以及網路監視功能的企業級的開源解決方案。 zabbix組件主要分兩個: zabbix-server和zabbix-agent。支持的監控協議有ICMP,IPMI,SNMP,HTTP以及zabbix協議(最常使用的協議用來監控各被監控端)。 收集的數 ...
  • 介紹 本章主要介紹在Linux中搭建FTP伺服器的過程,需要掌握的要點是配置文件的合理配置。 知識點 在linux中使用的FTP是vsftp FTP可以有三種登入方式分別是: 安裝FTP 使用YUM安裝 文件配置 安裝完之後在/etc/vsftpd/路徑下會存在三個配置文件。 vsftpd.conf ...
  • 配置網路 1、開啟虛擬網路 單擊左側導航的更改適配器設置: 開啟Vmware虛擬網路1與網路8 2、設置虛擬主機網路類型為:橋接模式(重要) 關閉虛擬主機,設置網路類型為橋接模式,然後啟動即可。 3、使用vi編輯器配置虛擬機網路 文件路徑:/etc/sysconfig/network-scripts... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...