按特征输出最大值和最小值的行
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 赋给它,继续发现比它还小的,也赋值给数组
*** 你必须十分努力,才能看起来毫不费力 ***