使用 awk 获取列的最大值,对于另一列的每个唯一值

Using awk to get the maximum value of a column, for each unique value of another column

所以我有一个文件,例如:

10 1 abc
10 2 def
10 3 ghi
20 4 elm
20 5 nop
20 6 qrs
30 3 tuv

我想为第一列的每个值获取第二列的最大值,即:

10 3 ghi
20 6 qrs
30 3 tuv

如何使用 awk 或类似的 unix 命令?

您可以使用 awk:

awk '>max[]{max[]=; row[]=[=10=]} END{for (i in row) print row[i]}' file

输出:

10 3 ghi
20 6 qrs
30 3 tuv

解释:

awk 命令使用关联数组 max,键为 </code>,值为 <code>。每次我们遇到一个已经存储在这个关联数组 max 中的值时,我们更新我们之前的条目并将整行存储在另一个具有相同键的关联数组 row 中。最后在 END 部分,我们简单地迭代关联数组 row 并打印它。

sort

的更短替代方案
$ sort -k1,1 -k2,2nr file | sort -u -k1,1

10 3 ghi
20 6 qrs
30 3 tuv

按字段一和字段二(数字,反向)排序,这样每个键的最大值将排在组首,按第二个排序为每个键选择第一个。