用awk实现计算
时间:2011-02-20
来源:互联网
我有一个文件如下格式
5 2 1
7 1 1
8 1 3
12 1 4
15 4 2
21 2 4
23 2 3
25 2 3
30 1 3
35 2 2
39 1 1
...
第一列是从小到大的一组数,但不连续,我想做的是,第1列的数字落在10-20(包含临界点)之间的就分别把第2列的数相加,第3列的数相加,输出结果为10-20 5 6,然后依次下去,都按10个单位进行计算,结果如下格式
10-20 5 6
20-30 7 13
30-40 4 6
....
哪位高手可以帮忙解决下,谢谢!
5 2 1
7 1 1
8 1 3
12 1 4
15 4 2
21 2 4
23 2 3
25 2 3
30 1 3
35 2 2
39 1 1
...
第一列是从小到大的一组数,但不连续,我想做的是,第1列的数字落在10-20(包含临界点)之间的就分别把第2列的数相加,第3列的数相加,输出结果为10-20 5 6,然后依次下去,都按10个单位进行计算,结果如下格式
10-20 5 6
20-30 7 13
30-40 4 6
....
哪位高手可以帮忙解决下,谢谢!
作者: susie_gan 发布时间: 2011-02-20
回复 susie_gan
复制代码
- awk '!($1%10){a1[int(($1-1)/10)]+=$2;a2[int(($1-1)/10)]+=$3}{a1[int($1/10)]+=$2;a2[int($1/10)]+=$3}END{for (i in a1) print i*10"-"(i+1)*10,a1[i],a2[i]}' file
作者: ywlscpl 发布时间: 2011-02-20
回复 susie_gan
复制代码
10-20 5 6
20-30 7 13
30-40 4 6
- awk 'BEGIN{min = 10; max = 20}{
- if($1 < min) next;
- if($1 >= min && $1 <= max){
- t += $2
- h += $3
- a[min"-"max] = t" "h
- }
- if($1 >= max){
- min = min+10;
- max = max+10;
- t = $2
- h = $3
- a[min"-"max] = t" "h
- }
- }END{
- for(i in a){
- print i" "a[i]
- }
- }' urfile|sort -n|column -t
20-30 7 13
30-40 4 6
作者: xrzs1986 发布时间: 2011-02-21
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28