如何基于列排序,但基于另一列的uniq?

Ken*_*Ken 7 linux sorting uniq

他,我有一个文件有一些列.我想对第2列进行排序,然后对第1列应用uniq.我发现这篇文章谈论了同一列的sort和uniq,但我的问题有点不同.我正在考虑使用一些东西sort,uniq但不知道如何使用.谢谢.

Bru*_*uce 7

您可以使用管道,但它不到位.

示例:

$ cat initial.txt
1,3,4
2,3,1
1,2,3
2,3,4
1,4,1
3,1,3
4,2,4

$ cat initial.txt | sort -u -t, -k1,1 | sort -t, -k2,2
3,1,3
4,2,4
1,3,4
2,3,1
Run Code Online (Sandbox Code Playgroud)

结果按键2排序,按键1唯一.注意结果显示在控制台上,如果你想在文件中,只需使用重定向(> newFiletxt)

这种更复杂操作的其他解决方案是依赖于另一种工具(取决于您的偏好(和年龄),awk,perl或python)

编辑:如果我理解正确的新要求,它按字母2排序,第1列对于给定的列2是唯一的:

$ cat initial.txt | sort -u -t, -k1,2 | sort -t, -k2,2
3,1,3
1,2,3
4,2,4
1,3,4
2,3,1
1,4,1
Run Code Online (Sandbox Code Playgroud)

这是你期望的吗?否则,我不明白:-)

  • 感谢布鲁斯的回答.嗯....但我的情况需要先排序然后uniq.这意味着第一列可能具有重复值但不会彼此相邻.还有什么想法?我是awk的初学者,但如果你有一个很好的解决方案.我想用它.谢谢. (2认同)