使用 awk 打印文本文件中的所有最大值

使用 awk 打印文本文件中的所有最大值

我正在尝试打印出一列中的所有最大值

所以输入看起来像这样

John.      Marketing.   5000.  
Marcus.    Manager.     9500.  
Jason.     SW           9500.  
Cindy.     Developer.   6000.  

我想要的输出是

   name: Marcus, sal: 9500.    
   name: Jason, sal: 9500      

到目前为止,我的代码是

    BEGIN {a=0}

    {
        if ($3> a)
           max=$3;
        output=$1
     }

    END{
      print "name: ", output, "sal:", max
    }

答案1

您需要解析文件两次,首先找到最大值,然后用它打印行,例如(假设max是正数):

解析.awk

NR == FNR && $3  > max { max = $3 }
NR != FNR && $3 == max

像这样运行它:

awk -f paste.awk infile{,}

添加{ print "name:", $1, "sal:", $3 }到最后一行以parse.awk更改格式,输出将是:

name: Marcus. sal: 9500.
name: Jason. sal: 9500.

答案2

使用 awk 脚本,您可以执行以下操作:

tst.awk

!max || $3 > max {max=$3; delete array}
$3 == max {array[$0]="name:" OFS $1 OFS "sal:" OFS $3}
END{
        for(key in array){
                print array[key]
        }
}

这样就可以了:

  • 如果不存在max或小于$3设置并删除数组max$3array
  • 如果$3等于将max您的输出存储在数组中
  • END在脚本的末尾,对于array打印中的每个键

如果您的值列表max不太大,您可以使用该脚本。否则@Thor的回答可能是一个更好的解决方案。

相关内容