我有一个包含数字 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” - 用于按第一列排序