免费注册 查看新帖 |

Chinaunix

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

再问awk求最大值问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-11-18 11:53 |只看该作者 |倒序浏览
我想求出一个文件中,第2域的最大值,并把对应行打印出来。如我想从文件1.txt 取出第2域分别等于JJ41、DD31的最大值,并把对应行打印出来,即
111118_1101;DD31;45.7700
111118_1101;JJ41;45.7700
但实际执行不成功,请个位前辈指导
>cat 1.txt
110912_2243;JJ41;19.1400
110912_2244;JJ41;18.7600
110912_2245;JJ41;17.9400
110912_2246;JJ41;16.9800
111002_2359;JJ41;5.7100
111118_1101;JJ41;45.7700
110912_2243;DD31;19.1400
110912_2244;DD31;18.7600
110912_2245;DD31;17.9400
110912_2246;DD31;16.9800
111002_2359;DD31;5.7100
111118_1101;DD31;45.7700

>awk 'BEGIN{FS=OFS=";"}{if(a[$2]<$3){a[$2]=$3;b[$1";"$2";"$3]=$0}}END{ for(i in b){print b[i]}}' 1.txt
110912_2243;JJ41;19.1400
110912_2243;DD31;19.1400
111118_1101;DD31;45.7700
111118_1101;JJ41;45.7700

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
2 [报告]
发表于 2011-11-18 12:01 |只看该作者
b[$2]=$0

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
3 [报告]
发表于 2011-11-18 12:01 |只看该作者
你的第二域不是数字,你是按字符串比较最大值的吗?

论坛徽章:
0
4 [报告]
发表于 2011-11-18 12:19 |只看该作者
awk脚本文件内容如下就可以

  1. BEGIN{FS=";"}
  2. {
  3. if(!a[$2] || a[$2] < $3)
  4. {
  5.         a[$2] = $3
  6.         b[$2] = $0
  7. }
  8. }
  9. END{
  10. for(i in b)
  11. {
  12.         print b[i]
  13. }
  14. }
复制代码

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
5 [报告]
发表于 2011-11-18 12:31 |只看该作者
我想求出一个文件中,第2域的最大值,并把对应行打印出来。如我想从文件1.txt 取出第2域分别等于JJ41、DD31 ...
camelly 发表于 2011-11-18 11:53



    我发现我总是审错题目,尼古丁依赖症还没彻底康复呢.
    awk 'BEGIN{FS=";"}NF==3{x=strtonum($3);if($2 in a){if(x>a[$2]){a[$2]=x;b[$2]=$0}}else{a[$2]=x;b[$2]=$0}}END{for(i in a)print b}'

论坛徽章:
0
6 [报告]
发表于 2011-11-18 12:56 |只看该作者
谢谢各位前辈,b[$2]=$0——修改一点就行了,是我原来理解错了

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

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

论坛徽章:
0
9 [报告]
发表于 2011-11-22 14:25 |只看该作者
回复 1# camelly
你好:
   我使用了其他的方法也做出来了
  sort -t";" -k3n 1.txt |tail -2
  但是你作的,我没有看懂,能给我讲解下么?谢谢了

论坛徽章:
0
10 [报告]
发表于 2011-11-22 14:30 |只看该作者
回复 9# vnb2018


   你好!我懂了!不用解释了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP