我有数千个这样的数据:
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
$ datamash -t_ groupby 1 max 2 < file
abc_4
def_3
ghi_2
或者对于您的特定输入,假设前缀字符串是固定长度,使用标准实用程序sort
和uniq
:
$ sort -t_ -k1,1 -k2,2nr file | uniq -w4
abc_4
def_3
ghi_2