Linux下利用awk進行文本統計

          最近做了許多日志文件的統計工作,發現awk這個東西用來處理文本真是太強大了,結合sed和sort命令應付日常的文本統計工作
          非常之方便 ,下面是我這段時間對awk的學習理解和常用的命令:

          1. awk的命令格式:
          awk命令是由模式和操作組成的(兩者是可選的):
          pattern {action} 如awk $1~/(\.jpg|\.gif)$/' access.log,或awk 'length($1) < 10' click.log。
          如果沒有模式,則action應用到全部記錄,
          如果沒有action,則輸出匹配模式的全部記錄。
          默認情況下,每一個輸入行都是一條記錄,但我們可以通過RS變量指定不同的行分隔符進行一行的定義。
              1.1 模式,可以是正則表達式,也可以是關系表達式,在表達式前面用~和~!分別表示匹配和不匹配后面的模式
                   BEGIN:指定在第一條記錄被處理之前所進行的工作
                   END:指定在最后一條記錄被處理之后所進行的工作
              1.2 操作,由一個或多個命令、函數、表達式組成,操作需要用大括號{}包含,這里面就是對文本要進行處理的邏輯

          2. awk的環境變量(常用):
              $0 完整的一行記錄
              $n 當前記錄的第n個字段
              ARGV 命令行參數數組
              FS 字段分隔符,默認是空格或tab,可以自己指定
              NR 當前記錄數
              NF 當前記錄的字段數
              RS 一行記錄的分隔符,默認是換行符

          3. 文本處理常用命令:
              3.1 所有第1列相同的行,按第2列的和,求和的結果倒序輸出(類似SQL中的group by求sum())
                  awk '{arr[$1]+=$2}END{for (i in arr) print i,arr[i]}' src.txt  | sort -k2nr -g > dest.txt
              3.2 文件分割,每100萬行分成一個文件
                  awk '{if (NR<1000000) print $0 >"file01";if (NR>=1000000) print $0>"file02"}' src.txt
                  當然,分割文件還有一個更方便的工具split,split -b1000m src.txt output_prefix (按大小來分割)
              3.4 統計第一列的值出現的次數,結果倒序輸出(類似SQL中的group by求count())
                  awk -F "," '{ w[$1]+=1} END{ for (a in w)  print a, w[a]}' src.txt  > dest.txt
              3.5 刪除重復的行
                  awk '!a[$0]++' src.txt > dest.txt (也可以指定$x來刪除第x列重復的行)
              3.6 字符串連接
                  awk 'length($1) > 0 {var="insert into user_info values("$1")";print var}' src.txt > dest.sql
              3.7 比較兩列
                   awk '{max = {$1 > $3} ? $1: $3: print max}' src.txt
          以上就是一些常用的awk命令,主要是用于文本的統計,另外,awk還內置了很多函數,包括時間函數、數學函數和字符串函數,
          可以方便地直接引用。
          更詳細的awk手冊,請參考:http://man.lupaworld.com/content/manage/ringkee/awk.htm

          -->槍聲依舊<--

          posted on 2012-01-15 17:28 槍聲依舊 閱讀(10314) 評論(0)  編輯  收藏 所屬分類: Linux


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


          網站導航:
           
          <2012年1月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          導航

          統計

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          文章分類

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 六枝特区| 遂宁市| 福州市| 台北市| 张家川| 勐海县| 盱眙县| 商城县| 泾阳县| 定襄县| 西平县| 葫芦岛市| 岐山县| 天峻县| 高邑县| 通辽市| 安远县| 方城县| 湖州市| 社旗县| 龙游县| 阿拉善左旗| 教育| 新巴尔虎右旗| 宣城市| 福清市| 古交市| 涿州市| 镇巴县| 胶州市| 五原县| 广安市| 乌审旗| 高密市| 棋牌| 连江县| 都江堰市| 新乐市| 锡林浩特市| 桓台县| 蒲城县|