首页 > linux > awk 按其中一列消重,取另一列的count
2009十一月10

awk 按其中一列消重,取另一列的count

可能方法笨了点,不过想了半天才想出来,这玩意刚接触写的还真是慢啊。

今天要做的东西是取一列的值,并且按数据表的另一列进行消重,这可太要命了。二维数组这玩意在awk和没有一样,无奈啊。不过好在功夫不负苦心人,好歹咱是弄出来了,虽然代码并不优雅,不过总算是解决了问题。

数据表:

Nov 08 00:00:02  [info] {SPR}daheng{SPR}20091108000002{SPR}24667315{SPR}S1{SPR}
Nov 08 00:00:02  [info] {SPR}poker{SPR}20091108000002{SPR}27214282{SPR}S1{SPR}
Nov 08 00:00:02  [info] {SPR}poker{SPR}20091108000002{SPR}22744303{SPR}S1{SPR}
Nov 08 00:00:04  [info] {SPR}wulin{SPR}20091108000004{SPR}26731683{SPR}S1{SPR}
Nov 08 00:00:05  [info] {SPR}dandan{SPR}20091108000005{SPR}27216032{SPR}S2{SPR}
Nov 08 00:00:05  [info] {SPR}wulin{SPR}20091108000005{SPR}18377545{SPR}S4{SPR}
Nov 08 00:00:05  [info] {SPR}wulin{SPR}20091108000005{SPR}16908624{SPR}S7{SPR}
Nov 08 00:00:05  [info] {SPR}dandan{SPR}20091108000005{SPR}24638959{SPR}S1{SPR}
Nov 08 00:00:06  [info] {SPR}daheng{SPR}20091108000006{SPR}27213205{SPR}S10{SPR}
Nov 08 00:00:07  [info] {SPR}daheng{SPR}20091108000006{SPR}27213205{SPR}S10{SPR}

最开始没有考虑消重,写的语句是:

nawk 'BEGIN{FS="{SPR}";OFS="\t";}{arr[$2]++}END{for(i in arr) print i,arr[i] > "demo.txt"}' game_login_20091108.log

这样输出是没有问题的。不过就是没有考虑消重,这不符合预期目标,改之。把代码写在文件中了,呼。

BEGIN{FS="{SPR}";OFS="\t";}
  {
      arrgameqid[$2$4]++;
      if(NR==1){
          arr[$2]++;
      }  
      if(NR!=1){
          if(arrgameqid[$2$4] == 1)
              arr[$2]++;
      }      
  }  
  END{
      for(i in arr)
      {
          print i,arr[i] > "demo.txt"
      }  
  }

哈哈,不管咋说,总算是解决了问题了。嗯,Happy一下。

文章作者:simaopig
本文地址:http://www.xiaoxiaozi.com/2009/11/10/1626/
版权所有 © 转载时必须以链接形式注明作者和原始出处!

One Response to “awk 按其中一列消重,取另一列的count”

  1. #1 網賺@誌 回复 | 引用 Post:2009-11-10 14:34

    技术性比较强的说

    [回复]

  2. #2 洗眼器 回复 | 引用 Post:2009-11-11 10:44

    技术!

    [回复]

发表评论

:wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-D :-? :) :( :!: 8-O 8)