当列值可互换时保留重复项的第一个实例

当列值可互换时保留重复项的第一个实例

我之前问过一个关于保留第一个重复项实例的问题,并且提供的解决方案到目前为止一直运行良好(请参阅保留第一个重复项实例)。

但是,我现在遇到的情况是,C 列和 D 列中的值可能相同,但顺序不同,并且我只想保留一个(任一顺序都可以)。

输入示例:

A B C D E F G
1 2 T TACA 3 2 Q
9 3 A C 9 3 P
8 3 I R 8 2 Q
9 3 C A 9 3 P
4 8 C T 7 4 P
9 3 T G 9 3 P

期望的输出:

A B C D E F G
1 2 T TACA 3 2 Q
9 3 A C 9 3 P
8 3 I R 8 2 Q
4 8 C T 7 4 P
9 3 T G 9 3 P

使用:(sort -k3,4 -k5,5r -k1,1r file | sort -k1,1 -k3,4 -u | sort -k1,1r或类似的)保留9 3 A C 9 3 P9 3 C A 9 3 P版本,但我只想保留其中之一。增加的复杂性是,A 列的值可能有多个可接受的 C 列和 D 列值(例如上面所需输出示例中的第 2 行9 3 A C 9 3 P和第 5 行9 3 T G 9 3 P),因此无法仅根据 A 列搜索重复项。

谢谢!

答案1

awk '{
    key1 = $1 FS $2 FS $5 FS $5 FS $7
    if ( ((key1 SUBSEP $3 FS $4) in seen) || ((key1 SUBSEP $4 FS $3) in seen) )
        next
    seen[key1, $3 FS $4] = 1
    print
}'
A B C D E F G
1 2 T TACA 3 2 Q
9 3 A C 9 3 P
8 3 I R 8 2 Q
4 8 C T 7 4 P
9 3 T G 9 3 P

相关内容