Linux的;排序数据并仅打印一列的最高值

时间:2017-11-21 10:32:27

标签: linux sorting

使用linux,我尝试根据第1列和第2列对数据进行排序,并仅打印第3列中具有最高值的行。我的数据看起来像

A 1 75.0
A 1 99.0
A 2 68.0
B 1 66.0
B 1 50.0
B 2 75.0
B 2 80.0

“键”位于第1列和第2列,而且我想只打印第3列中具有最高值的行,当第1列和第2列的数据相等时,就像这样

A 1 99.0
A 2 68.0
B 1 66.0
B 2 80.0

我尝试使用sort sort -k1,1 -k2,2来做,但是如何更改命令,它只打印第3列中值最高的行?

1 个答案:

答案 0 :(得分:1)

您可以只使用一个Awk解决方案,而不是在sort

中添加多个选项标记
awk 'unique[$1FS$2]<$3{unique[$1FS$2]=$3; next}END{for (i in unique) print i,unique[i]}' file

我们的想法是创建哈希表,其中键为前两列,表名为unique,键为$1FS$2,然后我们将每个唯一键的最大值添加到表中打印完所有谎言后,我们在END子句中打印哈希表。