awk實現groupby和join

1.awk實現join

最終要實現類似  

select   a.a,a.b,b.name   
from a left join b 
on a.id=b.bid  
group by  a.a,a.b,b.name

shell的寫法

awk -f name.awk file1  file2 > file3

name.awk的寫法:

BEGIN{
    FS="\t";OFS="\t";   #設置分隔符
}

# argument index 1 file - id,dealid,impid,materialid  #根據id關聯出dealid和impid
ARGIND==1{
    arr_deal[$1] = $2;
    arr_imp[$1] = $3;
}
#文件2作爲主表,和文件1關聯,其中文件2的第4個字段和文件1的第1個字段關聯
ARGIND==2{
    if($4 in arr_deal){
        print $1,$2,$3,$4,$7,$6,arr_deal[$4],$5,$8;
    }
    else{
        print $1,$2,$3,$4,$7,$6,0,$5,$8;
    }
}

2.awk實現group by  sum

實現類似sql:

select a,b,c,d,sum(income)  from table group by a,b,c,d

awk寫法如下 

BEGIN{
    FS="\t";OFS="\t";
}
{
    #$1=a  $2=b  $3=c   $4=d  $5=income 
    income[$1"\t"$2"\t"$3"\t"$4]+=$5;
}
END{
    for(i in income){
        print i,income[i];
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章