删除具有无序重复值的行

删除具有无序重复值的行

我有一个包含数字 1、2 和 3 的成对组合的文件。

输入示例:

2 1
3 1
1 2
3 2
1 3
2 3

我想做的是删除具有重复值但不按顺序排列的行之一。

输出示例:

2 1
3 1
3 2

例如:2 1 相当于 1 2,因此删除其中一行。

我会注意到我提供了一个小例子,因为我也可以很容易地将这些数字配对。我希望将其缩放为具有 4 个以上数字的成对组合的文件。我不知道如何继续,所有互联网搜索者都会产生重复的行或重复的列。请让我知道如何改进这个问题/标题。提前致谢!

答案1

实现我想要的最好方法是对行上的数字进行排序,然后删除重复项(如 @alecxs 的评论中所建议的)。这解决方案是:

awk '$1>$2{$0=$2 OFS $1} 1' example.txt | sort -u

在哪里:

$1>$2{$0=$2 OFS $1} sorts each line. sort -u removes duplicate lines.

答案2

另一种方法涉及使用数组跟踪“看到的”数字对

awk '!a[$1 < $2? $1 FS $2: $2 FS $1]++' file
2 1
3 1
3 2

答案3

例如:

~$ cat 1.txt                                                                                                                                                                                   
2 1
3 1
1 2
3 2
1 3
2 3
~$ cat 1.txt| sort -nk1                                                                                                                                                                        
1 2
1 3
2 1
2 3
3 1
3 2

sort -nk1

“n” - 用于数字排序

“k1” - 用于按第一列排序

相关内容