如何筛选数字最高的数据

如何筛选数字最高的数据

我有数千个这样的数据:

abc_1
abc_2
abc_3
abc_4
def_1
def_2
def_3
ghi_1
ghi_2

我想对其进行过滤以仅获取具有最高数字的数据abc_4, def_3, ghi_2

我怎样才能得到它?

答案1

使用 awk,正如您的标签所暗示的那样:

$ awk -F_ '
    {m[$1] = $2 > m[$1] ? $2 : m[$1]} 
    END {OFS = FS; for(x in m) print x, m[x]}
  ' file | sort
abc_4
def_3
ghi_2

如果你有 GNU awk > 4.0,你可以在内部进行排序

$ awk -F_ '
    {m[$1] = $2 > m[$1] ? $2 : m[$1]} 
    END {
      OFS = FS; PROCINFO["sorted_in"] = "@ind_str_asc"; 
      for(x in m) print x, m[x]
    }
  ' file
abc_4
def_3
ghi_2

或者,如果你有磨坊主您可以使用动词进行分组最大化stat1

$ mlr --nidx --fs _ stats1 -a max -f 2 -g 1 file
abc_4
def_3
ghi_2

GNU 数据聚合

$ datamash -t_ groupby 1 max 2 < file
abc_4
def_3
ghi_2

或者对于您的特定输入,假设前缀字符串是固定长度,使用标准实用程序sortuniq

$ sort -t_ -k1,1 -k2,2nr file | uniq -w4
abc_4
def_3
ghi_2

相关内容