本帖最后由 关阴月飞 于 2013-04-19 13:07 编辑
回复 12# cai6642113
处理过程分为三个步骤(三段AWK),懒得去想别的方法了:
1. 第一个:完成 "以红色字段为条件完全相同的为一组,蓝色字段数值相加"
2. 第二个:完成 "分别计算黄色字段去重后的条数"
3. 第三个:完成 "还有个文件B,要在最后输出的$3与n 之间再加一个B文件中的一列字段,只要$1,$2 完全相同就插入文件B的$3到输出的结果的$4"- awk -F, '{a[$7" "$8]+=$13;b[$7" "$8]=$2?b[$7" "$8]" "$2:$2}END{for(i in a)print i,a[i],b[i]}' A |\
- awk '{for(i=4;i<=NF;i++)if(!a[$i]++)n++;print $1,$2,$3,n;n=0}' |\
- awk 'FNR==NR{a[$1$2]=$NF;next}{n=$NF;$NF=a[$1$2];print $0,n}' B -
复制代码
- [root@awktest]# cat A
- 20,13016236390,0,0,0,0,898,0898,9999999999,,2,0,6,0,0,0,0
- 20,13016236391,0,0,0,0,898,0898,9999999999,,2,0,6,0,0,0,0
- 21,13016240088,0,0,0,0,898,0762,9999999999,,2,0,20,0,0,0,0
- 24,13032256323,0,0,0,0,220,022,9999999999,,2,0,21,0,0,0,0
- 24,13032256324,0,0,0,0,220,022,9999999999,,2,0,21,0,0,0,0
- [root@awktest]# cat B
- 898 0762 12345
- 220 022 54321
- 898 0898 45678
- [root@awktest]# awk -F, '{a[$7" "$8]+=$13;b[$7" "$8]=$2?b[$7" "$8]" "$2:$2}END{for(i in a)print i,a[i],b[i]}' A |\
- awk '{for(i=4;i<=NF;i++)if(!a[$i]++)n++;print $1,$2,$3,n;n=0}' |\
- awk 'FNR==NR{a[$1$2]=$NF;next}{n=$NF;$NF=a[$1$2];print $0,n}' B -
- 898 0762 20 12345 1
- 220 022 42 54321 2
- 898 0898 12 45678 2
复制代码 |