一、分组求和并排序
1.存在文件groupsum.txt原始数据如下,对下面的文件根据第四列进行分组,并对1,2,3列进行求和。
0.2 0.3 0.5 1
0.3 0.1 0.2 3
0.4 0.2 0.3 1
0.2 0.2 0.2 2
0.3 0.3 0.3 2
0.3 0.2 0.6 3
0.1 0.1 0.1 4
原始数据如上统计为如下这个样子:
0.6 0.5 0.8 1
0.5 0.5 0.5 2
0.6 0.3 0.8 3
0.1 0.1 0.1 4
实现逻辑:
对每一列简历一个数据,数组下标为第四列的值,当出现重复值时对其进行求和;处理完成之后再END中输出。
实现方法:
awk '{a[$4]+=$1;b[$4]+=$2;c[$4]+=$3}END{for(i in a)print a[i],b[i],c[i],i}' groupsum.txt
对上述文件,根据第四列进行分组,并对1,2,3列进行求和,并根据第四列进行倒叙排列。
awk '{a[$4]+=$1;b[$4]+=$2;c[$4]+=$3}END{for(i in a)print a[i],b[i],c[i],i}' groupsum.txt |sort -k4nr
对上述文件,
根据第四列进行分组,并对1,2,3列进行求和,并根据第一列进行倒叙,第二列正序输出
。
awk '{a[$4]+=$1;b[$4]+=$2;c[$4]+=$3}END{for(i in a)print a[i],b[i],c[i],i}' groupsum.txt |sort -k1nr -k2n
二、有如下文件,roleid,serverid分组,取出每个角色最后一次登录时的记录
文件last_login 中包含roleid serverid logintime level四个字段,文件具体内容如下:
1001 1 2018-01-01 21:00:02 10
1002 2 2008-01-02 22:01:02 11
1001 1 2018-01-01 20:58:01 9
1001 2 2018-01-01 21:01:02 12
awk -F"\t" '{if($3>a[$1$2]) {a[$1$2]=$3;b[$1$2]=$0}}END{for(i in b) print b[i]}' last_login.txt
三、分组统计
还以last_login.txt 为例,以roleid和serverid分组,统计出现次数。
awk -F "\t" '{a[$1][$2]=a[$1][$2]+1}END{for (i in a) {for (j in a[i]) print i,j,a[i][j]}}' last_login.txt
四、取最后一行
还是以last_login.txt 为例,以roleid和serverid分组,查询每个角色的最后一条记录
awk -F "\t" '{if (a[$1][$2] >$3 ||a[$1][$2]=="") a[$1][$2]=$0}END{for (i in a) {for (j in a[i]) print i,j,a[i][j]}}' last_login.txt