免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2630 | 回复: 16
打印 上一主题 下一主题

问一个稍微比较复杂的统计数字的题目,谢谢。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-06-26 00:11 |只看该作者 |倒序浏览
比如我有个file.txt内容如下:

10.11     test:
14.134   test:
122.11   test:
22.111   test1:
12.121   test1:
56.131   /root/aaa
89.133  /root/aaa


要求变成如下格式

146.354   test[3]
34.232    test1[2]
145.264  aaa[2]

total: 325.85


也就是统计每个的总数,并标出有几个。
并处理名称,当有:的时候,把:去掉,当含有斜线的时候,取最后一个斜线后面的作为名称。
最后再算出所有的总和。

请各位达人指点一下

[ 本帖最后由 coos_cn 于 2009-6-27 11:36 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-06-26 00:43 |只看该作者

  1. gawk '
  2. {
  3.    a[$2] += $1;
  4.    b[$2]++;
  5. }
  6. END{
  7.   for(i in a){
  8.     t=i;
  9.     gsub(/:|.*\//, "", t);
  10.     print a[i], t"["b[i]"]";
  11.   }
  12. }'

复制代码

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
3 [报告]
发表于 2009-06-26 09:19 |只看该作者
try:
  1. awk -F '[ :]+| */.*/' '!a[$2]{if(NR!=1)print s[p],p"["a[p]"]";p=$2}{a[p]++;s[p]+=$1}END{print s[p],p"["a[p]"]"}' urfile
复制代码

[ 本帖最后由 blackold 于 2009-6-26 09:22 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2009-06-26 09:32 |只看该作者
2个都可以,真是厉害啊,我都看不懂,膜拜中。
谢谢!

另外一个,所有的总计怎么写。就是把所有前面的相加

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
5 [报告]
发表于 2009-06-26 09:35 |只看该作者
再添加一个变量就行了:
  1. $ awk -F '[ :]+| */.*/' '!a[$2]{if(NR!=1)print s[p],p"["a[p]"]";t+=s[p];p=$2}{a[p]++;s[p]+=$1}END{print s[p],p"["a[p]"]";print "total is " t+s[p]}' urfile
复制代码

论坛徽章:
0
6 [报告]
发表于 2009-06-26 09:51 |只看该作者
t+s[p]好像不对呢。

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
7 [报告]
发表于 2009-06-26 09:54 |只看该作者

回复 #6 coos_cn 的帖子

你核对了吗?

论坛徽章:
0
8 [报告]
发表于 2009-06-26 10:06 |只看该作者
没想到这么复杂的计算,linux脚本都可以完成,linux真的高深莫测啊!

论坛徽章:
0
9 [报告]
发表于 2009-06-26 10:50 |只看该作者
是啊,强悍。谢谢。

论坛徽章:
0
10 [报告]
发表于 2009-06-26 11:05 |只看该作者
比着 lululau  大哥的学习下
  1. awk '{a[$2] +=$1;b[$2]++;p=p+a[$2];}END{for(i in a){t=i;gsub(/:|.*\//,"",t); print a[i],t"["b[i]"]";}print "total is " p;}' file2.txt
复制代码

学会了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP