免费注册 查看新帖 |

Chinaunix

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

awk求最大(小)值 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-10-20 20:54 |只看该作者 |倒序浏览
请问大虾 怎么用awk命令输出一列数据中的最大or最小值?或者其他命令?

论坛徽章:
1
处女座
日期:2014-12-23 17:59:27
2 [报告]
发表于 2008-10-20 21:03 |只看该作者
自己动手写啦。
awk 'NR==1{max=$1;min=$1}{if($1>max){max=$1};if($1<min){min=$1}}END{print "max= "max;print "min= "min}' urfile

论坛徽章:
0
3 [报告]
发表于 2008-10-20 21:23 |只看该作者
这个命令用过,最大值可以最小值不行。

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
4 [报告]
发表于 2008-10-20 21:33 |只看该作者
sort -n[r] + head -n1

论坛徽章:
1
处女座
日期:2014-12-23 17:59:27
5 [报告]
发表于 2008-10-20 21:45 |只看该作者
原帖由 willwuqh 于 2008-10-20 21:23 发表
这个命令用过,最大值可以最小值不行。

呵呵,又是一个不行的。

有错误的话给出错误信息。 光一个不行,那就只有像waker 说的那啥... 找老中医了。

论坛徽章:
0
6 [报告]
发表于 2008-10-21 15:41 |只看该作者
原帖由 willwuqh 于 2008-10-20 21:23 发表
这个命令用过,最大值可以最小值不行。

你的文件是是否有空白行。
在我的测试中如果有空白行的话,那么就无法取到最小值,否则是可以的。


[oracle@test ~]$ more c
1111
2
3
4444444
333333
3333
0





1
-333
[oracle@test ~]$ awk 'NR==1{max=$1;min=$1}{if($1>max){max=$1};if($1<min){min=$1}}END{print "max= "max;print "min= "min}' c
max= 4444444
min=
[oracle@test ~]$ awk 'NR==1{max=$1;min=$1}{if($1>max){max=$1};if($1<min && $1!=""){min=$1}}END{print "max= "max;print "min= "min} ' c
max= 4444444
min= -333
[oracle@test ~]$

[ 本帖最后由 olivenan 于 2008-10-21 15:47 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2008-10-21 16:17 |只看该作者
awk '$1~/^$/{next} NR==1 {MAX=$1;MIN=$1} NR>=1 {if($1>MAX){MAX=$1} if($1<MIN) {MIN=$1}} END{print "max number is: "MAX "\nmin number is:"MIN}' ufile

把空行过滤掉应该就行了吧

[ 本帖最后由 jackymail 于 2008-10-21 16:36 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2008-10-21 19:11 |只看该作者
zj@zj:~/Script/cushell/08.10.21$ cat number
1 2
3 4
5 6
7 8
9 10
zj@zj:~/Script/cushell/08.10.21$ awk -v min=max=0 '{if($1>max)max=$1;if($1<min)min=$1}END{printf("min=%s,max=%s",min,max);print ""}' number
min=1,max=9

你有空行肯定最下就没了阿,就是空了

论坛徽章:
0
9 [报告]
发表于 2008-10-21 20:35 |只看该作者

回复 #7 jackymail 的帖子

文件第一行为空所以得不出正确结果,小弟在此多谢各位大虾的相助!

jackymail大虾的命令中去空格字符~/^$/少了!,加上!不管空白行是第几行都可得出正确结果。
awk '$1 !~/^$/{next} NR==1 {MAX=$1;MIN=$1} NR>=1 {if($1>MAX){MAX=$1} if($1<MIN) {MIN=$1}} END{print "max number is: "MAX "\nmin number is:"MIN}' ufile

olivenan 大哥的命令
awk 'NR==1{max=$1;min=$1}{if($1>max){max=$1};if($1<min && $1!=""){min=$1}}END{print "max= "max;print "min= "min} '
如果空白行不是首行可得出正确答案,如果首行是空也不行。

论坛徽章:
1
处女座
日期:2014-12-23 17:59:27
10 [报告]
发表于 2008-10-22 00:38 |只看该作者
原帖由 willwuqh 于 2008-10-21 20:35 发表
文件第一行为空所以得不出正确结果,小弟在此多谢各位大虾的相助!

jackymail大虾的命令中去空格字符~/^$/少了!,加上!不管空白行是第几行都可得出正确结果。
awk '$1 !~/^$/{next} NR==1 {MAX=$1;MIN=$1}  ...

要达到你的要求 也是很容易的。 自己想想看看资料就懂了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP