对特定列进行排序,仅输出其中一个相同但在另一列中具有最高编号的列

时间:2013-10-04 13:00:35

标签: sorting duplicates uniq

我有这样的记录:

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条记录。这对我来说似乎效率很低。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

你可以通过sort的两次传递来实现这一点(假设我首先理解你的要求,看到上面发布的所需数据片段与你的描述不符)。第一个通道按字段2到4按升序排序,字段6按降序排序,第二个通道仅对字段2到4进行排序,但除了为每个字段组合选择那些行之外,还要传递“稳定排序”和唯一标记。 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