awk 用数组实现分组统计求和

[[email protected] ~]# cat 2_awk.txt #txt文档有三列数据

1  A  1

2  B  2

3  C  1

4  D  1

5  E  3

6  A  2

7  B  1

8  C  2

9  D  3

[[email protected] ~]# cat 2_awk.txt|awk ‘{print $1,$2}‘ #打印第一列和第二列

1 A

2 B

3 C

4 D

5 E

6 A

7 B

8 C

9 D

(1)统计ABCDE出现的次数

[[email protected] ~]# cat 2_awk.txt |awk ‘{a[$2]=a[$2]+1}END{for (i in a)print i,a[i]}‘

A 2

B 2

C 2

D 2

E 1

或者

[[email protected] chenjianfeng]# cat 2_awk.txt |awk ‘{a[$2]+=1}END{for (i in a)print i,a[i]}‘

A 2

B 2

C 2

D 2

E 1

分析:$2代表第二列;

pattern{ commands }语句块是从文件或标准输入(stdin)读取一行,然后执行pattern{ commands }语句块,它逐行扫描文件,从第一行到最后一行重复这个过程,直到文件全部被读取完毕;

当读取第一行是a[A]=a[A]+1,a[A]默认初始值为0,所以此时a[A]=1;

当读取第二行是a[B]=a[B]+1,a[B]默认初始值为0,所以此时a[B]=1;

当读取第三行是a[C]=a[C]+1,a[C]默认初始值为0,所以此时a[C]=1;

当读取第四行是a[D]=a[D]+1,a[D]默认初始值为0,所以此时a[D]=1;

当读取第五行是a[E]=a[C]+1,a[E]默认初始值为0,所以此时a[E]=1;

当读取第六行是a[A]=a[A]+1,a[A]初始值已经变为1,所以此时a[A]=1+1,即a[A]=2;

当读取第七行是a[B]=a[B]+1,a[B]初始值已经变为1,所以此时a[B]=1+1,即a[B]=2;

当读取第八行是a[C]=a[C]+1,a[C]初始值已经变为1,所以此时a[C]=1+1,即a[C]=2;

当读取第九行是a[D]=a[C]+1,a[D]初始值已经变为1,所以此时a[D]=1+1,即a[D]=2;

END语句块在awk从输入流中读取完所有的行之后即被执行;

for (i in a) 读取数组的所有下标,即i分别等于A、B、C、D、E循环赋值

print i,a[i] 打印值

(2)第三列是等于3的,然后再按照第二列分组

分析:$3==3 是限制第三列等于3的行,这里要区别$3=3,$3=3是将第三列的值都变为3

[[email protected] ~]# cat 2_awk.txt|awk ‘$3==3 {a[$2]+=1} END{for (i in a) print i,a[i]}‘

D 1

E 1

[[email protected] ~]# cat 2_awk.txt|awk ‘$3=3‘

1 A 3

2 B 3

3 C 3

4 D 3

5 E 3

6 A 3

7 B 3

8 C 3

9 D 3

[[email protected] ~]# cat 2_awk.txt|awk ‘$3==3‘

5  E  3

9  D  3

(3)按照第二列分组,计算第三列的总数

[[email protected] chenjianfeng]# cat 2_awk.txt |awk ‘{a[$2]=a[$2]+$3}END{for (i in a)print i,a[i]}‘

A 3

B 3

C 3

D 4

E 3

或者

[[email protected] chenjianfeng]# cat 2_awk.txt |awk ‘{a[$2]+=$3}END{for (i in a)print i,a[i]}‘

A 3

B 3

C 3

D 4

E 3

(4)按照第二列分组,计算第三列的总数,只打印出总数等于4的

[[email protected] ~]# cat 2_awk.txt |awk ‘{a[$2]=a[$2]+$3}END{for (i in a)if(a[i]==4) print i,a[i]}‘

D 4

(5)按照第二列分组,计算第三列和第一列的总数

[[email protected] ~]# cat 2_awk.txt |awk ‘{a[$2]=a[$2]+$3;b[$2]=b[$2]+$1}END{for (i in a)  print i,a[i],b[i]}‘

A 3 7

B 3 9

C 3 11

D 4 13

E 3 5

时间: 2024-10-24 15:09:36

awk 用数组实现分组统计求和的相关文章

组函数及分组统计

分组函数 SQL中常用的分组函数 Count(): 计数 Max():求最大值 Min():求最小值 Avg():求平均值 Sum():求和 -- 统计emp表中的人数 select count(*) from emp; -- 统计获得奖金的人数 select count(comm) from emp; -- 求所有雇员的最低工资 select min(sal) from emp; -- 求所有雇员的最高工资 select max(sal) from emp; -- 求部门编号为20的雇员的平均

DataFrame基本操作 <三> 计算名次,移除重复数据,数据替换,划分区间,分组统计(变成类)

生成一个实例 df5 = DataFrame({'b': [4.3, 7, -3, 2], 'a': [0, 1, 0, 1], 'c': [-2, 5, 8, -2.5]}) print(df5) 运行结果 b a c 0 4.3 0 -2.0 1 7.0 1 5.0 2 -3.0 0 8.0 3 2.0 1 -2.5 计算名次 print(df5.rank() ) # 按行计算名次 print(df5.rank(axis=1)) # 按列计算名次 #这有意思了,这是计算名次,显示的结果是名次

Oracle数据库从入门到精通-分组统计查询

视频课程:李兴华 Oracle从入门到精通 视频课程学习者:阳光罗诺 视频来源:51CTO学院 整体内容: 统计函数的使用 分组统计查询的实现 对分组的数据过滤 统计函数 在之前我们就学习过一个COUNT()函数,这个函数的主要作用是统计一张表之中的数据量的个数.和它功能与之类似的常用函数有五个: 统计个数COUNT():根据表中的实际数据量返回结果. 求和SUM():是针对于数字的统计 平均值AVG():是针对数字的统计 最小值MIN():各种数据类型都支持. 最大值MAX():各种数据类型都

问题 B: 分组统计

分组统计 问题 B: 分组统计时间限制: 1 Sec 内存限制: 32 MB 提交: 416 解决: 107 [提交][状态][讨论版][命题人:外部导入] 题目描述 先输入一组数,然后输入其分组,按照分组统计出现次数并输出,参见样例. 输入 输入第一行表示样例数m,对于每个样例,第一行为数的个数n,接下来两行分别有n个数,第一行有n个数,第二行的n个数分别对应上一行每个数的分组,n不超过100. 输出 输出m行,格式参见样例,按从小到大排. 样例输入 1 7 3 2 3 8 8 2 3 1 2

sum(),max(),avg(),RATIO_TO_REPORT()--分组统计

select id,area, sum(1) over() as 总记录数, sum(1) over(partition by id) as 分组记录数, sum(score) over() as 总计 , sum(score) over(partition by id) as 分组求和, sum(score) over(order by id) as  分组连续求和, sum(score) over(partition by id,area) as 分组ID和area求和, sum(score

【Python数据分析】分组统计groupby

目录 1.语法 2.基础分组 2.分组后可迭代对象操作 3.按照轴类型进行分组 4.通过字典或者Series进行分组 5.通过函数分组 6.分组后常用数值函数 7.多函数计算 分组统计groupby功能: 根据某些条件,将数据拆成组 对每个组独立应用函数 将结果合并到一个数据结构中 1.语法 Dataframe在行(axis=0)或列(axis=1)上进行分组,将一个函数应用到各个分组并产生一个新值,然后函数执行结果被合并到最终的结果对象中. df.groupby(by=None, axis=0

分组统计:count,group by,having, order by

--统计男女生的总人数select COUNT(*) from Student where Sex='男'select COUNT(*) from Student where Sex='女'--统计每一个班级的总人数select COUNT(*) from Student where ClassId=1--分组统计:需要按班级分组,每一个组得到一个统计结果--select 字段列表 from 表列表 where 数据源筛选 group by 分组字段列表 order by 排序字段列表selec

分组统计查询(学习笔记)

查询出公司每个月支出的工资总和 --查询出公司每个月支出的工资总和 SELECT SUM(sal) FROM emp; 查询出公司的最高工资,最低工资和平均工资 --查询出公司的最高工资,最低工资和平均工资 SELECT MAX(sal),MIN(sal),ROUND(AVG(sal),2) FROM emp; 统计出公司最早雇佣和最晚雇佣的雇佣日期 --统计出公司最早雇佣和最晚雇佣的雇佣日期 SELECT MIN(hiredate) 最早雇佣日期 , MAX(hiredate) 最晚雇佣日期

010.简单查询、分组统计查询、多表连接查询(sql实例)

-------------------------------------day3------------ --添加多行数据:------INSERT [INTO] 表名 [(列的列表)] --SELECT UNION --SELECT 'HAHA',1,32--UNION ALL --全部显示/显示重复数据 即使集合相同--UNION---------将查询的两个结果集合并.结构必须一致 -->常见面试题 --SELECT 'HEHE',2,33------将查询结果添加到列表中(子查询)IN