免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: yestreenstars
打印 上一主题 下一主题

[文本处理] 去掉最大值和最小值然后求平均值 [复制链接]

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
11 [报告]
发表于 2013-03-26 15:45 |只看该作者
回复 9# jason680


    嗯,看出来了,确实如此,那我得好好研究一下你的代码了,虽然有点难以看懂~

论坛徽章:
0
12 [报告]
发表于 2013-03-26 16:16 |只看该作者
强人啊,学习

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:51:162015年亚洲杯之阿曼
日期:2015-04-07 20:00:59
13 [报告]
发表于 2013-03-26 16:58 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
14 [报告]
发表于 2013-03-26 17:21 |只看该作者
回复 1# yestreenstars


    去掉一个最高分,去掉一个最低分,最后得分。。。

论坛徽章:
6
摩羯座
日期:2013-08-24 10:43:10狮子座
日期:2013-08-25 10:27:06天秤座
日期:2013-09-11 20:28:44午马
日期:2014-09-28 16:06:0015-16赛季CBA联赛之八一
日期:2016-12-19 13:55:0515-16赛季CBA联赛之天津
日期:2016-12-20 14:01:23
15 [报告]
发表于 2013-03-26 17:44 |只看该作者
回复 9# jason680


Description: (mask them to see description)
  x ($1) for key name
  p[x] for full name
  c[x] for count
  p[x,1] for total $4
  p[x,2] for total $5
  p[x,3] for Max $4, and the same line $5 be p[x,4]
  p[x,5] for Min $4, and the same line $5 be p[x,6]


$ time awk '{x=$1;p[x]=$1" "$2" "$3;if(!c[x]++)for(n=0;n++<2p[x,n]=p[x,n+2]=p[x,n+4]=$(n+3);else{p[x,1]+=$4;p[x,2]+=$5;if(p[x,3]<$4){p[x,3]=$4;p[x,4]=$5}if(p[x,5]>$4){p[x,5]=$4;p[x,6]=$5}}}END{for(x in c){if(c[x]>=3){p[x,1]-=(p[x,3]+p[x,5]);p[x,2]-=(p[x,4]+p[x,6]);c[x]-=2}print p[x],p[x,1]/c[x],p[x,2]/c[x]}}' FILE1


beautiful!



   

论坛徽章:
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
16 [报告]
发表于 2013-03-27 10:48 |只看该作者
本帖最后由 blackold 于 2013-03-27 11:44 编辑

回复 1# yestreenstars


    try:
  1. awk '!c[$1]++{h[$1]=$1" "$2" "$3;max[$1]=min[$1]=$4;m[$1]=n[$1]=$5;}{if($4>max[$1]){max[$1]=$4;m[$1]=$5;}else if($4<min[$1]){min[$1]=$4;n[$1]=$5;}a[$1]+=$4;b[$1]+=$5;}END{for(i in c){if(c[i]>=3){a[i]-=max[i]+min[i];b[i]-=m[i]+n[i];c[i]-=2;}print h[i],a[i]/c[i],b[i]/c[i];}}' urfile
复制代码

论坛徽章:
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
17 [报告]
发表于 2013-03-27 11:04 |只看该作者
本帖最后由 blackold 于 2013-03-27 11:46 编辑

测试:
  1. $ wc -l urfile
  2. 297620 urfile
复制代码
  1. $ time awk '!c[$1]++{h[$1]=$1" "$2" "$3;max[$1]=min[$1]=$4;m[$1]=n[$1]=$5;}{if($4>max[$1]){max[$1]=$4;m[$1]=$5;}else if($4<min[$1]){min[$1]=$4;n[$1]=$5;}a[$1]+=$4;b[$1]+=$5;}END{for(i in c){if(c[i]>=3){a[i]-=max[i]+min[i];b[i]-=m[i]+n[i];c[i]-=2;}print h[i],a[i]/c[i],b[i]/c[i];}}' urfile
  2. Ken Black Driver 84.67 47.33
  3. Anne Red Student 60.86 105.27
  4. Peter Blue Teacher 77.9499 50.9545
  5. Sue Yellow Worker 114.58 66.3602
  6. awk  urfile  4.58s user 0.06s system 99% cpu 4.641 total
复制代码
  1. $ time awk '{x=$1;p[x]=$1" "$2" "$3;if(!c[x]++)for(n=0;n++<2;)p[x,n]=p[x,n+2]=p[x,n+4]=$(n+3);else{p[x,1]+=$4;p[x,2]+=$5;if(p[x,3]<$4){p[x,3]=$4;p[x,4]=$5}if(p[x,5]>$4){p[x,5]=$4;p[x,6]=$5}}}END{for(x in c){if(c[x]<=2){x4=p[x,1]/c[x];x5=p[x,2]/c[x]}else{x4=(p[x,1]-p[x,3]-p[x,5])/(c[x]-2);x5=(p[x,2]-p[x,4]-p[x,6])/(c[x]-2)}print p[x],x4,x5}}' urfile
  2. Ken Black Driver 84.67 47.33
  3. Anne Red Student 60.86 105.27
  4. Peter Blue Teacher 77.9499 50.9545
  5. Sue Yellow Worker 114.58 66.3602
  6. awk  urfile  7.50s user 0.06s system 98% cpu 7.641 total
复制代码
  1. $ time awk '{a[$1]=a[$1]!=""?a[$1]" "$4:$4;b[$1,$4]=$5;NF-=2;c[$1]=$0}END{for(i in a){k=split(a[i],d," ");asort(d,e);if(k==1)print c[i],e[1],b[i,e[1]];if(k==2){m=(e[1]+e[2])/2;n=(b[i,e[1]]+b[i,e[2]])/2;print c[i],m,n}if(k>=3){for(j=2;j<k;j++){m+=e[j];n+=b[i,e[j]]}print c[i],m/(k-2),n/(k-2)}m=n=0}}' urfile

  2. .... 还在运行中
复制代码

论坛徽章:
0
18 [报告]
发表于 2013-03-27 11:20 |只看该作者
看到这么一坨,头都大了,没看下去的动力了

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
19 [报告]
发表于 2013-03-27 11:31 |只看该作者
回复 17# blackold


    囧rz..黑哥你就别笑话我了~

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
20 [报告]
发表于 2013-03-27 11:42 |只看该作者
回复 17# blackold


Thank you for your idea and test time report.
That's great naming rule for array by max/m and min/n.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP