0

我有这样的记录:

1 4 6 4 2 4 8
2 3 5 4 6 7 1
5 4 6 4 3 8 4
1 4 6 4 5 7 1
5 7 3 3 3 6 3
6 7 3 3 4 8 4

我想在第 2、3、4 和 6 列上对它们进行排序,并在第 2、3、4 列中只保留一个相同的列,并且在第 6 列中具有最大的数字,例如:

1 4 6 4 5 7 1
2 3 5 4 6 7 1
5 4 6 4 3 8 4
5 7 3 3 3 6 3
6 7 3 3 4 8 4

我尝试了 sort 和 uniq 之间的各种组合,但一切都失败了,因为 uniq 不能应用于特定列。我想出的唯一方法是将列的顺序更改为首先按上述方式排序,然后将记录 2、3 和 4 移动到最后,然后使用 -w 运行 uniq,以便仅关注最后 3 条记录。这对我来说似乎效率很低。

感谢帮助!

4

1 回答 1

0

您可以通过两遍sort(首先假设我正确理解您的要求,看到上面发布的所需数据片段与您对它的描述不匹配)来实现这一点。第一遍按字段 2 到 4 升序和字段 6 降序排序,第二遍仅对字段 2 到 4 排序,但传入“稳定排序”和唯一标志,此外还为字段 2- 的每个组合挑选出那些行4 具有来自字段 6 的最高值

sort -k2,4n -k6,6nr  file.txt | sort -k2,4n -s -u
2 3 5 4 6 7 1
5 4 6 4 3 8 4
6 7 3 3 4 8 4
于 2013-10-04T13:22:32.047 回答