cat file
1 9
1 10
1 12
2 100
2 23
2 101
2 99
3 10
3 998
3 1
最大值的行:
- 数组版:
-
awk '{if(a[$1]<$2)a[$1]=$2}END{for(i in a)print i,a[i]}' file
-
-
非数组版:
-
awk '{if($1==x){if(y>$2)next}else{if(NR>1)print z};x=$1;y=$2;z=$0}' file <(echo)
[解析]
求最大值最简单,因为数组为定义的初值都是0,只要比它大的都赋值给它。
最小值的行:
- 数组版:
-
awk '!length(a[$1]) || $2<a[$1]{a[$1]=$2}END{for(i in a)print i,a[i]}' file
-
-
非数组版:
-
awk '{if($1==x){if(y>$2){z=$0;y=$2}}else{if(NR>1)print z;x=$1;y=$2;z=$0}}' file <(echo)
[解析]
最小值行稍微麻烦一些,数组的初值是0,不利于比较,只有当它为空的时候,把第一个特征的行的 $2 赋给它,继续发现比它还小的,也赋值给数组。
阅读(4182) | 评论(1) | 转发(0) |