星期四, 6月 28, 2012

常用sed與awk


  1. 統計行數
    單一檔案
    awk 'END{print FNR}' xxx.log

    多個檔案
    awk 'END{print FNR}' *.log
    用linux本身的wc指令也可達到效果
    wc -l *.log
  2. 取出重覆及不重覆次數
    [root@test]# cat a.txt
    12 1209185885333940
    12 1209185089989307
    12 1209185891525318
    13 1209186004855839
    13 1209185995006463
    13 1209185995006463

    awk '{a[$1]++}flag[$1,$2]!=1{b[$1]++}{flag[$1,$2]=1}END{for (i in a)print i,a[i],b[i]}' a.txt
    --
    12 3 3
    13 3 2
    reference: 请教awk如何同时统计 总数与不重复个数?
  3. 列出符合的資料
    • 單筆
      sed '0,/PARSE_FROM_HERE/' a.txt
      awk '/regex/ {getline;print}' a.txt
    • 之後(含符合項)
      awk '/regex/,0' a.txt
      awk '/regex/,G' a.txt
    • 之後(不含符合項)
      sed '0,/regex/d' a.txt
      awk '/regex/ {getline;print}' a.txt
    • 之前
      試半天用不出來,乾脆先倒過來讀,就可用上面的方法做出來了
      sed '1!G;h;$!d' test | awk '/regex/,0'

沒有留言: