awk 统计常用

2017-10-26  本文已影响0人  leobupt

1. 目的

主要以实例方式讲解, awk统计

级别,地区,企业级别,企业数量
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
地区,人口
北京,1000
上海,800
广东,600
河北,2000
南京,400
云南,1300
石家庄,200
秦皇岛,100
邢台,100
邯郸,120
新乡,150
九江,50
雄县,10
廊坊,20

2. 单表:单文件统计

实例模板, 书写风格, 如下:
# SQL实现: (如果有等效的SQL)
SQL代码
# awk实现
awk代码
# AWK结果:
结果展示
# 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

# 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
# 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:
# 结果:

3. 多表关联

上一篇 下一篇

猜你喜欢

热点阅读