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}
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"
}
}
{
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/
版权所有 © 转载时必须以链接形式注明作者和原始出处!
技术性比较强的说
[回复]
技术!
[回复]