我有 3 列
a 03 w
a 10 x
a 01 y
b 20 w
b 01 x
c 02 w
c 10 y
c 12 z
预期输出是
a 10 x
b 20 w
c 12 z
即我需要对第 2 列进行排序但不更改第 1 列的顺序 然后根据第 2 列 grep 列表中具有最大值的行
最佳答案
两种方法(选择你喜欢的一种):
1) sort + uniq “技巧”:
sort -k1,1 -k2,2rn file | uniq -w1
-k1,1
- 在第一阶段按第一个字段对行进行排序-k2,2rn
- 按倒数顺序按第二个字段对行进行排序uniq -w1
- 输出比较不超过1
的唯一行行中的字符(可以调整-w<number>
)
输出:
a 10 x
b 20 w
c 12 z
2) 使用 GNU datamash 工具即可:
datamash -Wsf -g1 max 2 <file | cut -f1-3
输出:
a 10 x
b 20 w
c 12 z
关于linux - 如何根据以下要求对列进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46109184/