gpt4 book ai didi

linux - 如何使用awk查找基于两列的唯一值

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:02:51 25 4
gpt4 key购买 nike

假设我有一个测试文件 (test.txt) 包含如下数据

1,2 
2,3
2,1
2,2
3,1
1,3
2,5
4,1

我想要每对删除重复项,比如对 (1,2) 和 (2,1) 中的任何一个都应该打印(先到先打印)。预期输出是

1,2
2,3
3,1
2,2
2,5
4,1

我试过这个命令,awk -F"," '!seen[$1,$2]++ && !seen[$2,$1]' test.txt .它打印为

1,2
2,3
3,1
2,5
4,1

为什么 2,2 对不打印?还有如何获得预期的输出。

最佳答案

如前所述,问题来自逻辑评估中的短路。

为了避免这种情况,一种选择是在二维表 seen 中测试和设置一个值:

awk -F"," '!seen[($1<$2?$1:$2)+0, ($1>$2?$1:$2)+0]++'

基本上它使用两个值中的最小值和最大值作为索引,因此一个测试而不是两个,然后递增插槽。

注意 +0 指令强制转换为整数。必须这样做,因为字段包含额外的空格,包括最后的行尾。

关于linux - 如何使用awk查找基于两列的唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56003544/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com