按特征输出最大值和最小值的行

source_data:

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]}' source_data
awk '{if($1==x){if(y>$2)next}else{if(NR>1)print z};x=$1;y=$2;z=$0}' source_data <(echo)

 说明:

求最大值最简单,因为数组为定义的初值都是0,只要比它大的都赋值给它

 

最小值:

awk '!length(a[$1])||a[$1]>$2 {a[$1]=$2} END{for(i in a) print i,a[i]}' source_data
awk '{if($1==x){if(y>$2){z=$0;y=$2}}else{if(NR>1)print z;x=$1;y=$2;z=$0}}' source_data <(echo)

 说明:

数组的初值是0,不利于比较,只有当它为空的时候,把第一个特征的行的 $2 赋给它,继续发现比它还小的,也赋值给数组

posted @ 2020-05-23 22:51  bigtree2pingping  阅读(173)  评论(0编辑  收藏  举报