仅打印具有最高值的行

Scy*_*aud 0 scripting awk text-processing sort

我需要在 bash 脚本中处理如下文件:

输入.txt:

host1 53
host1 123
host2 0
host1 222
host3 1
host1 85
host1 25
host1 13
host3 8
host2 90
Run Code Online (Sandbox Code Playgroud)

根据第 2 列中的最大值,我只需要为每个主机输入一行结果:

输出.txt:

host1 222
host2 90
host3 8
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Sté*_*las 6

使用 GNUsort或兼容:

<input.txt sort -k2rn | sort -sbuk1,1 >output.txt
Run Code Online (Sandbox Code Playgroud)


Rom*_*est 5

GNU 最短的一个datamash

datamash -sW -g1 max 2 <file
Run Code Online (Sandbox Code Playgroud)
  • -s - 在分组之前对输入进行排序
  • -W - 使用空格(一个或多个空格和/或制表符)作为字段分隔符
  • -g 1 - 通过第一个字段分组
  • max 2 - 数字运算来获取每组第二个字段的最大值

输出:

host1   222
host2   90
host3   8
Run Code Online (Sandbox Code Playgroud)