根据两列select唯一的行

我一直在想办法根据两列的值select唯一的行。 例如,这里是我的文件的示例/示例:

chr1 10 12 chr1 10 12 chr1 10 11 chr1 9 12 chr2 15 20 

这就是我想要我的输出看起来像:

 chr1 10 12 chr1 10 11 chr1 9 12 chr2 15 20 

我试图使用这个代码,因为我喜欢它如何不乱用我的文件的顺序:

 awk -F"\t" '!_[$2]++' SNP_positions.txt > SNP_positions_uniq.txt 

但是,它仅捕获一列的独特function。 有没有办法编辑这个,使其工作两列?

您可以完美地使用对数组元素使用多个字段的索引:

 awk -F"\t" '!seen[$2, $3]++' file 

在这种情况下,我们使用$2, $3作为索引。 这样,我们将获得元组中所有不同的元素($2, $3)

awk提供的解决方案非常快速,但是我自己也在寻找sort解决方案,在几乎所有的情况下可能都比较慢:

 cat file | sort -u -k1,1 -k2,2 -k3,3 -s 

我在这里找到了答案: https : //stackoverflow.com/a/12546627/778533