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];
}
}