1. 目的
主要以实例方式讲解, awk统计
- file1
级别,地区,企业级别,企业数量
1,北京,A,1
1,上海,B,2
0,广东,C,3
0,河北,D,4
2,南京,E,5
0,河北,F,6
1,北京,G,7
1,上海,H,8
2,南京,I,9
0,云南,J,10
2,石家庄,A,10
3,秦皇岛,B,20
2,石家庄,C,30
3,邢台,D,40
0,广东,E,50
1,北京,F,60
2,石家庄,G,70
3,邯郸,H,80
3,新乡,I,90
0,广东,J,100
0,广东,J,1000
- file2
地区,人口
北京,1000
上海,800
广东,600
河北,2000
南京,400
云南,1300
石家庄,200
秦皇岛,100
邢台,100
邯郸,120
新乡,150
九江,50
雄县,10
廊坊,20
2. 单表:单文件统计
实例模板, 书写风格, 如下:
# SQL实现: (如果有等效的SQL)
SQL代码
# awk实现
awk代码
# AWK结果:
结果展示
- 地区数, 地区人口总数 : (file2第二列求和)
# SQL:
select count(1), sum(`人口`) from file2
# AWK:
awk -F, '{a+=1;s+=$2} END{print a,s}' file2
# 结果:
15 6850
- 不同城市级别的企业数量, 倒序排列
# SQL:
select `城市级别`, sum(`企业数量`) as `total` from file1 group by `城市级别` order by total desc
# AWK:
awk -F, '{a[$1]+=$4} END {for (i in a) print i, a[i]}' file1 | sort -k2nr
# 结果:
0 1173
3 230
2 124
1 78
- 按城市+企业级别分组, 求各组企业数量, 倒序Top5
# SQL:
select `城市级别`, `企业级别`, sum(`企业数量`) as `total`
from file1 group by `城市级别`,`企业级别`
order by total desc
# AWK:
awk -F, '{a[$1" "$3]+=$4} END {for (i in a) print i, a[i]}' file1 | sort -k3nr | head -5
# 结果:
0,J 1110
3,I 90
3,H 80
2,G 70
1,F 60
- 筛选出企业级别ABCD的企业数量,并分组求和, 并倒序
# SQL:
select `企业级别`, sum(`企业数量`) as total from file1
where `企业级别` in ('A','B','C','D')
group by `企业级别` order by total desc
# AWK:
awk -F, 'BEGIN{a["A"]=0;a["B"]=0;a["C"]=0;a["D"]=0;}{if ($3 in a) {a[$3]+=$4;}} END {for(i in a) print i,a[i]}' file1 | sort -k2rn
# 结果:
D 44
C 33
B 22
A 11
- 待续...
- 筛选
# SQL:
# AWK:
# 结果:
- 筛选
# SQL:
# AWK:
# 结果:
- 筛选
# SQL:
# AWK:
# 结果:
网友评论