<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    我是FE,也是Fe

    前端來源于不斷的點滴積累。我一直在努力。

    統計

    留言簿(15)

    閱讀排行榜

    評論排行榜

    日志處理中一些shell命令技巧

    日志處理中一些shell命令技巧

    陰差陽錯的做的日志分析,前途未卜的這段日子,唯一還有點意思的可能就是手動的處理大量日志。總結一下。

    日志文件的輸入是動則幾個G的文本。從N個這樣的文件中得到一個列表,一個數字,一個比例。在什么工具都沒有情況下,用shell命令不僅是驗證系統數據的準確性的方法,也是一個很好的學習過程。

    使用cut命令切割日志行

    下面的一行典型的apache訪問日志:

    120.51.133.125 - - [26/Apr/2013:12:20:06 +0800] "GET /skins/skin_homepage.php?display=wvga&lang=ja_JP&pixel=720X1280&density=2.0&version=5.7&key=5146f54950f09f71750005ef&uid=1 HTTP/1.1" 200 4847 "http://t.co/rww3WDuhS5" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; YTB730)" 0 

    如果需要得到IP地址可以使用cut命令

     cat log | cut -d ' ' -f1 

    -d ' '表示按照空格將行切開,-f1 取第一個字段,這樣得到的結果就是IP列表

    有時候拿到的文件是\t分隔,也可以使用cut切開,只不過需要多寫一個$

    [l]$ cat log | cut -d '\t' -f1 cut: the delimiter must be a single character #-d '\t'會報錯的 cut -f2 -d$'\t' infile #work 

    使用tr命令去掉字符,替換字符

    如果拿到分割的文件

    cat log | tr -s ' ' ',' 

    將空格替換成,文件變成csv

    cat log | tr -d ' ' 

    上面的命令直接刪除空格

    日志處理后經常會出現空行,tr命令去掉空行的原理就是將連續兩個換行替換成一個換行

    cat log | tr -s '\n\n' '\n' 

    使用uniq命令去重

    試想得到IP列表,欲得到獨立訪問的IP列表。

    [l]$ cat log | cut -d ' ' -f1 | uniq -u 

    如果不僅僅是去重,還想統計每個IP訪問次數,可以加一個參數c

    [l]$ cat log | cut -d ' ' -f1 | uniq -uc 

    得到的格式形如:

    1 126.193.38.128 5 49.98.156.154 

    前面的數字就是出現的次數

    使用awk/seed來處理日志

    awk/seed是處理日志的最終的萬金油。確實是什么都可以做。awk/seed是一門很大的學問。這里取我碰到的一個日志,日志格式形如:

    display=wvga|||lang=ja_JP|||isActive=1|||pixel=720X1280|||density=2.0|||version=5.7|||key=5146f54950f09f71750005ef|||out=abc'3|||uid=1 

    如果我需要得到isActive=1的日志行,取到out=中'前一段,如上面的abc。

    cat l | grep "isActive=1|" | awk 'match($0,/out=[^\x27]+/){print substr($0,RSTART+4,RLENGTH-4)}' 

    grep的功能是篩選isActive=1的行。awk 后面跟''的是awk語言。$0總是代表當前匹配的字段值,match substr是awk可以用的函數,當match時后面{}中的代碼才會執行。當match,$0就是正則匹配的部分。RSTART,RLENGTH是awk可以使用的常量,分別表示開始匹配的開始下標,RLENGTH是匹配的長度。

    在''中需要再使用'光轉義是不行的,得用16進制的代碼\x27。轉16進制可以使用python代碼 "'".encode("hex")得到

    //驚訝awk就這么簡單的解釋了,可這連入門都算不上。

    集合操作

    試想我想得到兩個列表的交際,并集,差集,統計中經常會碰到,比如我想獲得昨天今天都在訪問的IP,其實就是今天的IP列表和昨天IP列表的交集。

    先定義兩個簡單的文件:

    [ l]$ cat a.txt 1 2 3 4 5 [ l]$ cat b.txt 4 5 6 7 8 9 

    如果想得到ab的交集4 5 ,可以使用下面的命令:

    sort -m a.txt b.txt | uniq -d 4 5 

    如果要得到并集1-9,可以:

    sort -m a.txt b.txt | uniq 1 2 3 4 5 6 7 8 9 

    如果想得到ab的差集,即a去掉ab的交集1 2 3

    comm -23 a.txt b.txt 1 2 3 

    同理:ba的差集:

    comm -13 a.txt b.txt comm -23 b.txt a.txt 

    上述兩個命令等價

    comm命令就是compare功能,如果什么參數都不帶呢得到的什么呢?

    comm a.txt b.txt 1 2 3 4 5 6 7 8 9 

    diff命令以前經常看代碼改了哪些:

    diff a.txt b.txt  1,3d0 < 1 < 2 < 3 5a3,6 > 6 > 7 > 8 > 9 

    總結&&參考資料

    竊以為能玩轉上面這些命令,處理個日志問題不大了。

    一篇介紹shell中集合操作的博文:

    http://wordaligned.org/articles/shell-script-sets

    一直放在收藏夾的shell方面的博客:

    Linux Shell常用技巧

    Linux Shell高級技巧 awk部分寫的獨好

    posted on 2013-06-02 14:45 衡鋒 閱讀(4487) 評論(1)  編輯  收藏 所屬分類: linux

    評論

    # re: 日志處理中一些shell命令技巧 2014-04-04 14:01 柚子舍

    有點看不懂的趕腳,剛學呢  回復  更多評論   


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲 欧洲 自拍 另类 校园| 亚洲AV日韩精品久久久久久| 国产精品亚洲自在线播放页码| 最近2019中文字幕免费大全5| 久久91亚洲精品中文字幕| a级毛片无码免费真人久久| 亚洲香蕉成人AV网站在线观看| 亚洲天堂免费在线视频| 国产亚洲大尺度无码无码专线| 美女网站在线观看视频免费的| 一本色道久久综合亚洲精品高清| 一级女人18片毛片免费视频| 色久悠悠婷婷综合在线亚洲| 日本视频在线观看永久免费| 亚洲日本在线看片| 黄页网站在线看免费| 亚洲欧洲AV无码专区| 亚洲欧洲国产成人综合在线观看| 国产久爱免费精品视频| 亚洲av午夜成人片精品网站 | 亚洲综合偷自成人网第页色| 免费不卡视频一卡二卡| 亚洲色大成网站www| 亚洲色一色噜一噜噜噜| 精品免费tv久久久久久久| 亚洲自偷精品视频自拍| 成年女人毛片免费播放视频m| 99亚洲精品卡2卡三卡4卡2卡| 亚洲综合av永久无码精品一区二区 | 四虎永久免费地址在线网站| 国产精品免费大片一区二区| 亚洲人成电影亚洲人成9999网| 一二三四免费观看在线电影| 特色特黄a毛片高清免费观看| 亚洲福利视频一区| 免费看美女让人桶尿口| 最近更新免费中文字幕大全| 亚洲午夜国产精品无卡| 亚洲精品视频在线观看你懂的| 巨波霸乳在线永久免费视频 | 久久精品毛片免费观看|