一、需求背景
二、详细介绍
三、方案代码:
当然可以使用你最熟悉的开发语言去写代码实现,本文用awk来实现,相比之下,性能极高。
注释版:
#!/bin/sh
awk -F '\t|x01' '
ARGIND==1{ // awk可同时操作多个文件,此处表示第一个文件 ka_20200308
userid[$1]=1; // 这几行都表示初始化数组,key为userid
username[$1]=$2;
userphone[$1]=$3;
income[$1]=0;
click[$1]=0;
}
ARGIND==2{ // 遍历第二个文件每行进行处理 order_20200308
if($3==1 && userid[$1]){ // 如果此行订单为已完成,则把金额汇总到对应userid
income[$1]+=$2;
}
}
ARGIND==3{ // 第三个文件 cick_20200308
if(userid[$4]){ // 汇总userid点击数
click[$4]++;
}
}
END{ // 最后汇总并且格式化输出逻辑
for(k in userid){
print k"\t"username[k]"\t"userphone[k]"\t"income[k]"\t"click[k]
}
}
' ka_20200308 order_20200308 click_20200308 >> output_20200308
纯享版:
#!/bin/sh
awk -F '\t|x01' '
ARGIND==1{
userid[$1]=1;
username[$1]=$2;
userphone[$1]=$3;
income[$1]=0;
click[$1]=0;
}
ARGIND==2{
if($3==1 && userid[$1]){
income[$1]+=$2;
}
}
ARGIND==3{
if(userid[$4]){
click[$4]++;
}
}
END{
for(k in userid){
print k"\t"username[k]"\t"userphone[k]"\t"income[k]"\t"click[k]
}
}
' ka_20200308 order_20200308 click_20200308 >> output_20200308