免费注册 查看新帖 |

Chinaunix

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

请教用awk求最大值的问题 [复制链接]

论坛徽章:
0
31 [报告]
发表于 2010-03-16 16:06 |只看该作者
回复 30# xiaoq3406


    你要是看懂了就不会问这个问题了。。已经把第二列最大的值找出来了,还有必要继续判断么

论坛徽章:
0
32 [报告]
发表于 2010-03-18 11:34 |只看该作者
awk '{a[$2]=$0"\n"a[$2];if($2>t)t=$2}END{print a[t]}' file

论坛徽章:
17
2015年辞旧岁徽章
日期:2015-03-03 16:54:152017金鸡报晓
日期:2017-02-08 10:39:422017金鸡报晓
日期:2017-01-10 15:19:56JAVA
日期:2016-11-01 13:25:46C
日期:2016-10-25 16:01:4715-16赛季CBA联赛之八一
日期:2016-06-21 23:38:0815-16赛季CBA联赛之山东
日期:2016-05-12 12:49:54IT运维版块每日发帖之星
日期:2016-04-20 06:20:00IT运维版块每日发帖之星
日期:2016-03-22 06:20:00黄金圣斗士
日期:2015-11-24 10:43:13IT运维版块每日发帖之星
日期:2015-08-25 06:20:002015亚冠之德黑兰石油
日期:2015-08-22 22:55:54
33 [报告]
发表于 2010-03-18 12:36 |只看该作者
回复 1# humanzhang
  1. #!/bin/awk -f

  2. {
  3.           for(j=1;j<=NF;j++)
  4.                         a[NR,j]=$j
  5. }

  6. END {
  7.         min=a[1,2]

  8.         for(i=1;i<=NR;i++)
  9.                 if(min<a[i,NF]) { min=a[i,NF] }

  10.         for(i=1;i<=NR;i++)
  11.                 if(a[i,NF]~min) print a[i,1],a[i,NF]
  12. }
复制代码

论坛徽章:
0
34 [报告]
发表于 2010-03-18 16:04 |只看该作者
回复 2# where27


    太佩服了 {:3_202:}

论坛徽章:
0
35 [报告]
发表于 2010-03-19 10:41 |只看该作者
佩服xiaerxuxu 29楼的
sort -k +2 -r filename | awk '$2>=max{max=$2;print $0}'
这样子才算简单明了嘛。。。

论坛徽章:
0
36 [报告]
发表于 2010-03-24 13:14 |只看该作者
awk '{a[$2]=$0"\n"a[$2];if($2>t)t=$2}END{print a[t]}' file
76862157 发表于 2010-03-18 11:34



    这个是比较好的。

论坛徽章:
0
37 [报告]
发表于 2010-03-24 13:40 |只看该作者
本帖最后由 rollingpig 于 2010-03-24 16:35 编辑

写一个看起来复杂,但是从理论上来说资源占用少,性能好的吧

  1. awk '$2>=m{if($2>m){m=$2;o=$0}else o=o"\n"$0}END{print o}'  datafile
复制代码
或者这样看清晰点

  1. awk '
  2.    BEGIN{output="";maxvalue="" }
  3.   {
  4.   if($2>=maxvalue){
  5.      if($2>maxvalue){
  6.       output=$0;
  7.       maxvalue=$2;     
  8.     }else{
  9.       output=output"\n"$0;
  10.    }
  11.   }
  12. }
  13. END{print output}' datafile
复制代码

论坛徽章:
0
38 [报告]
发表于 2010-03-24 13:46 |只看该作者
只访问一次文件
只保留两个临时变量,最大值和相应需要输出的数据

论坛徽章:
0
39 [报告]
发表于 2010-03-24 14:09 |只看该作者
回复 38# rollingpig


    哇,多谢斑竹夸奖

论坛徽章:
0
40 [报告]
发表于 2010-03-24 16:17 |只看该作者
awk  '{if(num<=$2) {num=$2;a[$1]=$2}}END{for(i in a) if(a[i]==num) print a[i],i}' 1.txt
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP