Awk 基于文件的第二高值

Awk 基于文件的第二高值,awk,Awk,我在一个文件中有以下文本,它由分隔符(=)分隔,我需要为每一组第二个字段获取第二个最高值,我尝试了下面的代码并能够获得最高值,是否有一种方法可以使用Unix命令实现以获得预期的输出 第一最高值: cat File.txt | awk -F= '{if (a[$2] < $1 ) a[$2] = $1;}END{for(i in a ) {print i,a[i];}' OFS='=' 预期输出: 20180526=AA 20180530=BB 20180621=AA 2018063

我在一个文件中有以下文本,它由分隔符(=)分隔,我需要为每一组第二个字段获取第二个最高值,我尝试了下面的代码并能够获得最高值,是否有一种方法可以使用Unix命令实现以获得预期的输出

第一最高值:

cat File.txt | awk -F= '{if (a[$2] < $1 ) a[$2] = $1;}END{for(i in a )
{print i,a[i];}' OFS='='
预期输出:

20180526=AA   
20180530=BB
20180621=AA
20180630=BB
20180630=CC
20180630=DD
20180731=BB
20180731=CC
20180731=DD
20180526=AA
20180630=BB
20180630=CC
20180630=DD

您需要保留两个数组,并将第一个数组中被更高值覆盖的任何值降级到第二个数组。然后在最后打印第二个数组

awk-F='a[$2]<$1{b[$2]=a[$2];a[$2]=1;}
END{for(b中的i)print i,b[i];}'OFS='='file.txt
(还要注意我们如何避免这种情况)


这并不试图对只出现一次的值做任何有用的事情;如果您可以为这些行为指定一个行为,那么添加它应该很容易。(如果需要帮助,请提出新问题。)

awk'!n[$2]+'FS='='文件