awk输出首行相同的最大值和最小值

来源:互联网 发布:端口监听命令 编辑:程序博客网 时间:2024/05/21 11:15

file

1       9

1       10

1       12

1       6

2       4

2       100

2       23

2       101

2       99

3       10

3       998

3       1

3       90

求出首行相同的最大值和最小值的行进行输出。

最大值:

awk '{if(a[$1]<$2)a[$1]=$2}END{for(i in a)print i,a[i]}'  file

解析:

进行比较,以首行的第一个字段为下标建立数组,如果下标的值小于第二个字段,那么就将第二个字段的值赋值给数组的值,这里需要说的是,开始数组的值是0,所以是小于$2是成立的,所以是理所当然的进行赋值。到最后进行输出。

最小值:

awk '!(a[$1]){a[$1]=$2}{if(a[$1]>$2)a[$1]=$2}END{for(i in a)print i,a[i]}' file

解析:

最小值的时候不能,简单的更改一个符号,把上面的小于号改为大于号就行,因为开始的时候a[$1]的值是0,肯定是不大于$2的,这时候没有办法进行比较,所以我这里做的是,如果数组的下表是第一次出现的话,我把这行的第二个字段赋值给数组,然后进行比较。最后进行输出。

0 0